ni: makes pointer default super-class of all extern classes
[nit.git] / c_src / parser._sep.c
index 6acc14b..d193cff 100644 (file)
@@ -795,7 +795,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(714);
+  REGB0 = TAG_Int(715);
   fra.me.REG[1] = NEW_Array_array___Array___with_capacity(REGB0);
   /* ./parser//parser.nit:153 */
   REGB0 = TAG_Int(0);
@@ -1093,7 +1093,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:212 */
-  REGB0 = TAG_Int(7);
+  REGB0 = TAG_Int(6);
   fra.me.REG[2] = NEW_ReduceAction59_parser___ReduceAction59___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1103,12 +1103,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:214 */
-  REGB0 = TAG_Int(8);
+  REGB0 = TAG_Int(7);
   fra.me.REG[2] = NEW_ReduceAction61_parser___ReduceAction61___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:215 */
-  REGB0 = TAG_Int(9);
+  REGB0 = TAG_Int(8);
   fra.me.REG[2] = NEW_ReduceAction62_parser___ReduceAction62___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1118,7 +1118,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:217 */
-  REGB0 = TAG_Int(10);
+  REGB0 = TAG_Int(9);
   fra.me.REG[2] = NEW_ReduceAction64_parser___ReduceAction64___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1128,12 +1128,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:219 */
-  REGB0 = TAG_Int(11);
+  REGB0 = TAG_Int(10);
   fra.me.REG[2] = NEW_ReduceAction66_parser___ReduceAction66___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:220 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(11);
   fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction67___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1513,7 +1513,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:296 */
-  REGB0 = TAG_Int(13);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction143_parser___ReduceAction143___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1523,7 +1523,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:298 */
-  REGB0 = TAG_Int(14);
+  REGB0 = TAG_Int(13);
   fra.me.REG[2] = NEW_ReduceAction145_parser___ReduceAction145___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1533,7 +1533,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:300 */
-  REGB0 = TAG_Int(15);
+  REGB0 = TAG_Int(14);
   fra.me.REG[2] = NEW_ReduceAction147_parser___ReduceAction147___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1543,7 +1543,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:302 */
-  REGB0 = TAG_Int(16);
+  REGB0 = TAG_Int(15);
   fra.me.REG[2] = NEW_ReduceAction149_parser___ReduceAction149___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1563,7 +1563,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:306 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(16);
   fra.me.REG[2] = NEW_ReduceAction153_parser___ReduceAction153___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1653,7 +1653,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:324 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction171_parser___ReduceAction171___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1693,7 +1693,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:332 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction179_parser___ReduceAction179___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1713,7 +1713,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:336 */
-  REGB0 = TAG_Int(20);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction183_parser___ReduceAction183___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1728,12 +1728,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:339 */
-  REGB0 = TAG_Int(21);
+  REGB0 = TAG_Int(20);
   fra.me.REG[2] = NEW_ReduceAction186_parser___ReduceAction186___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:340 */
-  REGB0 = TAG_Int(22);
+  REGB0 = TAG_Int(21);
   fra.me.REG[2] = NEW_ReduceAction187_parser___ReduceAction187___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1748,12 +1748,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:343 */
-  REGB0 = TAG_Int(23);
+  REGB0 = TAG_Int(22);
   fra.me.REG[2] = NEW_ReduceAction190_parser___ReduceAction190___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:344 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(23);
   fra.me.REG[2] = NEW_ReduceAction191_parser___ReduceAction191___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1783,12 +1783,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:350 */
-  REGB0 = TAG_Int(25);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction197_parser___ReduceAction197___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:351 */
-  REGB0 = TAG_Int(26);
+  REGB0 = TAG_Int(25);
   fra.me.REG[2] = NEW_ReduceAction198_parser___ReduceAction198___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1798,27 +1798,27 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:353 */
-  REGB0 = TAG_Int(27);
+  REGB0 = TAG_Int(26);
   fra.me.REG[2] = NEW_ReduceAction200_parser___ReduceAction200___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:354 */
-  REGB0 = TAG_Int(28);
+  REGB0 = TAG_Int(27);
   fra.me.REG[2] = NEW_ReduceAction201_parser___ReduceAction201___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:355 */
   REGB0 = TAG_Int(28);
-  fra.me.REG[2] = NEW_ReduceAction201_parser___ReduceAction201___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:356 */
   REGB0 = TAG_Int(28);
-  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction203___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:357 */
-  REGB0 = TAG_Int(29);
+  REGB0 = TAG_Int(28);
   fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction204___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1833,7 +1833,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:360 */
-  REGB0 = TAG_Int(30);
+  REGB0 = TAG_Int(29);
   fra.me.REG[2] = NEW_ReduceAction207_parser___ReduceAction207___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1848,7 +1848,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:363 */
-  REGB0 = TAG_Int(31);
+  REGB0 = TAG_Int(30);
   fra.me.REG[2] = NEW_ReduceAction210_parser___ReduceAction210___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1868,7 +1868,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:367 */
-  REGB0 = TAG_Int(32);
+  REGB0 = TAG_Int(31);
   fra.me.REG[2] = NEW_ReduceAction214_parser___ReduceAction214___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1878,18 +1878,18 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:369 */
-  REGB0 = TAG_Int(33);
+  REGB0 = TAG_Int(32);
   fra.me.REG[2] = NEW_ReduceAction216_parser___ReduceAction216___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:370 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction216_parser___ReduceAction216___init(REGB0);
+  REGB0 = TAG_Int(33);
+  fra.me.REG[2] = NEW_ReduceAction217_parser___ReduceAction217___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:371 */
-  REGB0 = TAG_Int(35);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction217_parser___ReduceAction217___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:372 */
@@ -1908,7 +1908,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:375 */
-  REGB0 = TAG_Int(36);
+  REGB0 = TAG_Int(35);
   fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1918,7 +1918,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:377 */
-  REGB0 = TAG_Int(37);
+  REGB0 = TAG_Int(36);
   fra.me.REG[2] = NEW_ReduceAction224_parser___ReduceAction224___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1928,23 +1928,23 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:379 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(37);
   fra.me.REG[2] = NEW_ReduceAction226_parser___ReduceAction226___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:380 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(38);
+  fra.me.REG[2] = NEW_ReduceAction227_parser___ReduceAction227___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:381 */
   REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:382 */
   REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction229_parser___ReduceAction229___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:383 */
@@ -1999,37 +1999,37 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:393 */
   REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction240___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:394 */
   REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:395 */
   REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:396 */
   REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:397 */
   REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:398 */
   REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:399 */
   REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:400 */
@@ -2068,12 +2068,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:407 */
-  REGB0 = TAG_Int(40);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction254___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:408 */
-  REGB0 = TAG_Int(41);
+  REGB0 = TAG_Int(40);
   fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction255___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2083,7 +2083,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:410 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(41);
   fra.me.REG[2] = NEW_ReduceAction257_parser___ReduceAction257___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2113,7 +2113,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:416 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(42);
   fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction263___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2133,7 +2133,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:420 */
-  REGB0 = TAG_Int(44);
+  REGB0 = TAG_Int(43);
   fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction267___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2143,12 +2143,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:422 */
-  REGB0 = TAG_Int(45);
+  REGB0 = TAG_Int(44);
   fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction269___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:423 */
-  REGB0 = TAG_Int(46);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction270___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2168,7 +2168,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:427 */
-  REGB0 = TAG_Int(47);
+  REGB0 = TAG_Int(46);
   fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction274___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2218,7 +2218,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:437 */
-  REGB0 = TAG_Int(48);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction284_parser___ReduceAction284___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2228,7 +2228,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:439 */
-  REGB0 = TAG_Int(49);
+  REGB0 = TAG_Int(48);
   fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction286___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2238,7 +2238,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:441 */
-  REGB0 = TAG_Int(50);
+  REGB0 = TAG_Int(49);
   fra.me.REG[2] = NEW_ReduceAction288_parser___ReduceAction288___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2263,18 +2263,18 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:446 */
-  REGB0 = TAG_Int(51);
-  fra.me.REG[2] = NEW_ReduceAction226_parser___ReduceAction226___init(REGB0);
+  REGB0 = TAG_Int(50);
+  fra.me.REG[2] = NEW_ReduceAction293_parser___ReduceAction293___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:447 */
   REGB0 = TAG_Int(51);
-  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction227_parser___ReduceAction227___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:448 */
-  REGB0 = TAG_Int(52);
-  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction295___init(REGB0);
+  REGB0 = TAG_Int(51);
+  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:449 */
@@ -2283,7 +2283,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:450 */
-  REGB0 = TAG_Int(53);
+  REGB0 = TAG_Int(52);
   fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction297___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2293,7 +2293,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:452 */
-  REGB0 = TAG_Int(54);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction299___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2303,7 +2303,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:454 */
-  REGB0 = TAG_Int(55);
+  REGB0 = TAG_Int(54);
   fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction301___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2323,18 +2323,18 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:458 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(55);
   fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction305___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:459 */
-  REGB0 = TAG_Int(57);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction306___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:460 */
   REGB0 = TAG_Int(57);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:461 */
@@ -2344,27 +2344,27 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:462 */
   REGB0 = TAG_Int(57);
-  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction309___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:463 */
-  REGB0 = TAG_Int(58);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(57);
+  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction310___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:464 */
   REGB0 = TAG_Int(58);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:465 */
-  REGB0 = TAG_Int(59);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(58);
+  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction312___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:466 */
   REGB0 = TAG_Int(59);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:467 */
@@ -2378,23 +2378,23 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:469 */
-  REGB0 = TAG_Int(60);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(59);
+  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction316___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:470 */
   REGB0 = TAG_Int(60);
-  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction317___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:471 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(60);
+  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction318___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:472 */
   REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:473 */
@@ -2448,13 +2448,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:483 */
-  REGB0 = TAG_Int(62);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction330_parser___ReduceAction330___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:484 */
   REGB0 = TAG_Int(62);
-  fra.me.REG[2] = NEW_ReduceAction331_parser___ReduceAction331___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:485 */
@@ -2463,13 +2463,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:486 */
-  REGB0 = TAG_Int(63);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction333_parser___ReduceAction333___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:487 */
   REGB0 = TAG_Int(63);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction334___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:488 */
@@ -2483,13 +2483,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:490 */
-  REGB0 = TAG_Int(64);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(63);
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction337___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:491 */
   REGB0 = TAG_Int(64);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction338___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:492 */
@@ -2498,13 +2498,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:493 */
-  REGB0 = TAG_Int(65);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(64);
+  fra.me.REG[2] = NEW_ReduceAction340_parser___ReduceAction340___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:494 */
   REGB0 = TAG_Int(65);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:495 */
@@ -2518,7 +2518,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:497 */
-  REGB0 = TAG_Int(66);
+  REGB0 = TAG_Int(65);
   fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2529,7 +2529,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:499 */
   REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction346___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:500 */
@@ -2539,7 +2539,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:501 */
   REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:502 */
@@ -2559,7 +2559,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:505 */
   REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction254___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:506 */
@@ -2624,17 +2624,17 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:518 */
   REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction365_parser___ReduceAction365___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:519 */
   REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:520 */
   REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction367___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction219___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:521 */
@@ -2643,7 +2643,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:522 */
-  REGB0 = TAG_Int(67);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction369___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2653,32 +2653,32 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:524 */
-  REGB0 = TAG_Int(68);
+  REGB0 = TAG_Int(67);
   fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction371___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:525 */
-  REGB0 = TAG_Int(69);
+  REGB0 = TAG_Int(68);
   fra.me.REG[2] = NEW_ReduceAction372_parser___ReduceAction372___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:526 */
-  REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction371___init(REGB0);
+  REGB0 = TAG_Int(69);
+  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction373___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:527 */
-  REGB0 = TAG_Int(71);
-  fra.me.REG[2] = NEW_ReduceAction374_parser___ReduceAction374___init(REGB0);
+  REGB0 = TAG_Int(70);
+  fra.me.REG[2] = NEW_ReduceAction372_parser___ReduceAction372___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:528 */
-  REGB0 = TAG_Int(72);
+  REGB0 = TAG_Int(71);
   fra.me.REG[2] = NEW_ReduceAction375_parser___ReduceAction375___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:529 */
-  REGB0 = TAG_Int(73);
+  REGB0 = TAG_Int(72);
   fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction376___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2689,17 +2689,17 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:531 */
   REGB0 = TAG_Int(73);
-  fra.me.REG[2] = NEW_ReduceAction185_parser___ReduceAction185___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction378_parser___ReduceAction378___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:532 */
   REGB0 = TAG_Int(73);
-  fra.me.REG[2] = NEW_ReduceAction379_parser___ReduceAction379___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction186_parser___ReduceAction186___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:533 */
-  REGB0 = TAG_Int(74);
-  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction376___init(REGB0);
+  REGB0 = TAG_Int(73);
+  fra.me.REG[2] = NEW_ReduceAction380_parser___ReduceAction380___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:534 */
@@ -2709,22 +2709,22 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:535 */
   REGB0 = TAG_Int(74);
-  fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction382___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction378_parser___ReduceAction378___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:536 */
   REGB0 = TAG_Int(74);
-  fra.me.REG[2] = NEW_ReduceAction185_parser___ReduceAction185___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction383_parser___ReduceAction383___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:537 */
   REGB0 = TAG_Int(74);
-  fra.me.REG[2] = NEW_ReduceAction379_parser___ReduceAction379___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction186_parser___ReduceAction186___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:538 */
-  REGB0 = TAG_Int(75);
-  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction376___init(REGB0);
+  REGB0 = TAG_Int(74);
+  fra.me.REG[2] = NEW_ReduceAction380_parser___ReduceAction380___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:539 */
@@ -2733,12 +2733,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:540 */
-  REGB0 = TAG_Int(76);
-  fra.me.REG[2] = NEW_ReduceAction387_parser___ReduceAction387___init(REGB0);
+  REGB0 = TAG_Int(75);
+  fra.me.REG[2] = NEW_ReduceAction378_parser___ReduceAction378___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:541 */
-  REGB0 = TAG_Int(77);
+  REGB0 = TAG_Int(76);
   fra.me.REG[2] = NEW_ReduceAction388_parser___ReduceAction388___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2748,7 +2748,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:543 */
-  REGB0 = TAG_Int(78);
+  REGB0 = TAG_Int(77);
   fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction390___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2758,7 +2758,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:545 */
-  REGB0 = TAG_Int(79);
+  REGB0 = TAG_Int(78);
   fra.me.REG[2] = NEW_ReduceAction392_parser___ReduceAction392___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2773,28 +2773,28 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:548 */
-  REGB0 = TAG_Int(80);
+  REGB0 = TAG_Int(79);
   fra.me.REG[2] = NEW_ReduceAction395_parser___ReduceAction395___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:549 */
-  REGB0 = TAG_Int(81);
+  REGB0 = TAG_Int(80);
   fra.me.REG[2] = NEW_ReduceAction396_parser___ReduceAction396___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:550 */
-  REGB0 = TAG_Int(82);
+  REGB0 = TAG_Int(81);
   fra.me.REG[2] = NEW_ReduceAction397_parser___ReduceAction397___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:551 */
   REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction397_parser___ReduceAction397___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction398_parser___ReduceAction398___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:552 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction399_parser___ReduceAction399___init(REGB0);
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction398_parser___ReduceAction398___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:553 */
@@ -2804,12 +2804,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:554 */
   REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction401_parser___ReduceAction401___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:555 */
-  REGB0 = TAG_Int(84);
-  fra.me.REG[2] = NEW_ReduceAction402_parser___ReduceAction402___init(REGB0);
+  REGB0 = TAG_Int(83);
+  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:556 */
@@ -2818,7 +2818,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:557 */
-  REGB0 = TAG_Int(85);
+  REGB0 = TAG_Int(84);
   fra.me.REG[2] = NEW_ReduceAction404_parser___ReduceAction404___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2829,16 +2829,16 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:559 */
   REGB0 = TAG_Int(85);
-  fra.me.REG[2] = NEW_ReduceAction397_parser___ReduceAction397___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction406_parser___ReduceAction406___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:560 */
-  REGB0 = TAG_Int(86);
-  fra.me.REG[2] = NEW_ReduceAction66_parser___ReduceAction66___init(REGB0);
+  REGB0 = TAG_Int(85);
+  fra.me.REG[2] = NEW_ReduceAction398_parser___ReduceAction398___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:561 */
-  REGB0 = TAG_Int(87);
+  REGB0 = TAG_Int(86);
   fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction67___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2869,7 +2869,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:567 */
   REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction77_parser___ReduceAction77___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction73_parser___ReduceAction73___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:568 */
@@ -2908,8 +2908,8 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:575 */
-  REGB0 = TAG_Int(88);
-  fra.me.REG[2] = NEW_ReduceAction171_parser___ReduceAction171___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction85_parser___ReduceAction85___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:576 */
@@ -2928,8 +2928,8 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:579 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction210_parser___ReduceAction210___init(REGB0);
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction175_parser___ReduceAction175___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:580 */
@@ -2938,13 +2938,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:581 */
-  REGB0 = TAG_Int(90);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction212_parser___ReduceAction212___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:582 */
   REGB0 = TAG_Int(90);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:583 */
@@ -2953,23 +2953,23 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:584 */
-  REGB0 = TAG_Int(91);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:585 */
   REGB0 = TAG_Int(91);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:586 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(91);
+  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction312___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:587 */
   REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:588 */
@@ -2983,23 +2983,23 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:590 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(92);
+  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction316___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:591 */
   REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction317___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:592 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(93);
+  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction318___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:593 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:594 */
@@ -3053,13 +3053,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:604 */
-  REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction330_parser___ReduceAction330___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:605 */
   REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction331_parser___ReduceAction331___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:606 */
@@ -3068,13 +3068,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:607 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(95);
+  fra.me.REG[2] = NEW_ReduceAction333_parser___ReduceAction333___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:608 */
   REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction334___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:609 */
@@ -3088,13 +3088,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:611 */
-  REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction337___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:612 */
   REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction338___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:613 */
@@ -3103,13 +3103,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:614 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(97);
+  fra.me.REG[2] = NEW_ReduceAction340_parser___ReduceAction340___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:615 */
   REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:616 */
@@ -3123,7 +3123,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:618 */
-  REGB0 = TAG_Int(99);
+  REGB0 = TAG_Int(98);
   fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -3134,7 +3134,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:620 */
   REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction346___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:621 */
@@ -3144,7 +3144,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:622 */
   REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:623 */
@@ -3164,12 +3164,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:626 */
   REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction353___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction254___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:627 */
   REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction357___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction354___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:628 */
@@ -3209,17 +3209,17 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:635 */
   REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction365_parser___ReduceAction365___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:636 */
   REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:637 */
   REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction367___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction219___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:638 */
@@ -3228,8 +3228,8 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:639 */
-  REGB0 = TAG_Int(100);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction369___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:640 */
@@ -3248,18 +3248,18 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:643 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:644 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:645 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction229_parser___ReduceAction229___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:646 */
@@ -3314,37 +3314,37 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:656 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction240___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:657 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:658 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:659 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:660 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:661 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:662 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:663 */
@@ -3383,8 +3383,8 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:670 */
-  REGB0 = TAG_Int(102);
-  fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction255___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction254___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:671 */
@@ -3393,7 +3393,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:672 */
-  REGB0 = TAG_Int(103);
+  REGB0 = TAG_Int(102);
   fra.me.REG[2] = NEW_ReduceAction257_parser___ReduceAction257___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -3423,12 +3423,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:678 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction269___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction263___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:679 */
-  REGB0 = TAG_Int(105);
+  REGB0 = TAG_Int(104);
   fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction270___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -3448,7 +3448,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:683 */
-  REGB0 = TAG_Int(106);
+  REGB0 = TAG_Int(105);
   fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction274___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -3498,8 +3498,8 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:693 */
-  REGB0 = TAG_Int(107);
-  fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction286___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction284_parser___ReduceAction284___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:694 */
@@ -3508,13 +3508,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:695 */
-  REGB0 = TAG_Int(108);
+  REGB0 = TAG_Int(107);
   fra.me.REG[2] = NEW_ReduceAction288_parser___ReduceAction288___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:696 */
-  REGB0 = TAG_Int(109);
-  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction295___init(REGB0);
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction289_parser___ReduceAction289___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:697 */
@@ -3523,7 +3523,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:698 */
-  REGB0 = TAG_Int(110);
+  REGB0 = TAG_Int(109);
   fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction297___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -3533,7 +3533,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:700 */
-  REGB0 = TAG_Int(111);
+  REGB0 = TAG_Int(110);
   fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction299___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -3543,7 +3543,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:702 */
-  REGB0 = TAG_Int(112);
+  REGB0 = TAG_Int(111);
   fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction301___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -3553,13 +3553,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:704 */
-  REGB0 = TAG_Int(113);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction303___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:705 */
   REGB0 = TAG_Int(113);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:706 */
@@ -3569,17 +3569,17 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:707 */
   REGB0 = TAG_Int(113);
-  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction309___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:708 */
-  REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(113);
+  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction310___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:709 */
   REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:710 */
@@ -3588,8 +3588,8 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:711 */
-  REGB0 = TAG_Int(115);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:712 */
@@ -3603,8 +3603,8 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:714 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
+  REGB0 = TAG_Int(115);
+  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:715 */
@@ -3618,13 +3618,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:717 */
-  REGB0 = TAG_Int(117);
+  REGB0 = TAG_Int(116);
   fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:718 */
   REGB0 = TAG_Int(117);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:719 */
@@ -3633,23 +3633,23 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:720 */
-  REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:721 */
   REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:722 */
-  REGB0 = TAG_Int(119);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction312___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:723 */
   REGB0 = TAG_Int(119);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:724 */
@@ -3663,23 +3663,23 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:726 */
-  REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction316___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:727 */
   REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction317___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:728 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction318___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:729 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:730 */
@@ -3733,13 +3733,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:740 */
-  REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction330_parser___ReduceAction330___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:741 */
   REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction331_parser___ReduceAction331___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:742 */
@@ -3748,13 +3748,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:743 */
-  REGB0 = TAG_Int(123);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(122);
+  fra.me.REG[2] = NEW_ReduceAction333_parser___ReduceAction333___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:744 */
   REGB0 = TAG_Int(123);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction334___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:745 */
@@ -3768,13 +3768,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:747 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction337___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:748 */
   REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction338___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:749 */
@@ -3783,13 +3783,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:750 */
-  REGB0 = TAG_Int(125);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(124);
+  fra.me.REG[2] = NEW_ReduceAction340_parser___ReduceAction340___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:751 */
   REGB0 = TAG_Int(125);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:752 */
@@ -3803,7 +3803,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:754 */
-  REGB0 = TAG_Int(126);
+  REGB0 = TAG_Int(125);
   fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -3814,7 +3814,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:756 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction346___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:757 */
@@ -3824,7 +3824,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:758 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:759 */
@@ -3844,7 +3844,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:762 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction254___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:763 */
@@ -3854,7 +3854,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:764 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction357___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction354___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:765 */
@@ -3894,12 +3894,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:772 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction365_parser___ReduceAction365___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:773 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction367___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:774 */
@@ -3908,13 +3908,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:775 */
-  REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction369___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:776 */
   REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:777 */
@@ -3923,23 +3923,23 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:778 */
-  REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:779 */
   REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:780 */
-  REGB0 = TAG_Int(129);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction312___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:781 */
   REGB0 = TAG_Int(129);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:782 */
@@ -3953,23 +3953,23 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:784 */
-  REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction316___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:785 */
   REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction317___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:786 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction318___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:787 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:788 */
@@ -4023,13 +4023,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:798 */
-  REGB0 = TAG_Int(132);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction330_parser___ReduceAction330___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:799 */
   REGB0 = TAG_Int(132);
-  fra.me.REG[2] = NEW_ReduceAction331_parser___ReduceAction331___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:800 */
@@ -4038,13 +4038,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:801 */
-  REGB0 = TAG_Int(133);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(132);
+  fra.me.REG[2] = NEW_ReduceAction333_parser___ReduceAction333___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:802 */
   REGB0 = TAG_Int(133);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction334___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:803 */
@@ -4058,13 +4058,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:805 */
-  REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction337___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:806 */
   REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction338___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:807 */
@@ -4073,22 +4073,22 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:808 */
-  REGB0 = TAG_Int(135);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(134);
+  fra.me.REG[2] = NEW_ReduceAction340_parser___ReduceAction340___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:809 */
   REGB0 = TAG_Int(135);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:810 */
   REGB0 = TAG_Int(135);
-  fra.me.REG[2] = NEW_ReduceAction657_parser___ReduceAction657___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:811 */
-  REGB0 = TAG_Int(136);
+  REGB0 = TAG_Int(135);
   fra.me.REG[2] = NEW_ReduceAction658_parser___ReduceAction658___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -4099,7 +4099,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:813 */
   REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction660_parser___ReduceAction660___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:814 */
@@ -4109,17 +4109,17 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:815 */
   REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction662_parser___ReduceAction662___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction252___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:816 */
   REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction353___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction663_parser___ReduceAction663___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:817 */
   REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction357___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction354___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:818 */
@@ -4159,12 +4159,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:825 */
   REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction365_parser___ReduceAction365___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:826 */
   REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction367___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:827 */
@@ -4173,8 +4173,8 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:828 */
-  REGB0 = TAG_Int(137);
-  fra.me.REG[2] = NEW_ReduceAction675_parser___ReduceAction675___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction369___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:829 */
@@ -4183,13 +4183,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:830 */
-  REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(137);
+  fra.me.REG[2] = NEW_ReduceAction677_parser___ReduceAction677___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:831 */
   REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:832 */
@@ -4198,13 +4198,13 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:833 */
-  REGB0 = TAG_Int(139);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:834 */
   REGB0 = TAG_Int(139);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:835 */
@@ -4213,8 +4213,8 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:836 */
-  REGB0 = TAG_Int(140);
-  fra.me.REG[2] = NEW_ReduceAction683_parser___ReduceAction683___init(REGB0);
+  REGB0 = TAG_Int(139);
+  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:837 */
@@ -4223,7 +4223,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:838 */
-  REGB0 = TAG_Int(141);
+  REGB0 = TAG_Int(140);
   fra.me.REG[2] = NEW_ReduceAction685_parser___ReduceAction685___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -4233,7 +4233,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:840 */
-  REGB0 = TAG_Int(142);
+  REGB0 = TAG_Int(141);
   fra.me.REG[2] = NEW_ReduceAction687_parser___ReduceAction687___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -4243,7 +4243,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:842 */
-  REGB0 = TAG_Int(143);
+  REGB0 = TAG_Int(142);
   fra.me.REG[2] = NEW_ReduceAction689_parser___ReduceAction689___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -4253,8 +4253,8 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:844 */
-  REGB0 = TAG_Int(144);
-  fra.me.REG[2] = NEW_ReduceAction687_parser___ReduceAction687___init(REGB0);
+  REGB0 = TAG_Int(143);
+  fra.me.REG[2] = NEW_ReduceAction691_parser___ReduceAction691___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:845 */
@@ -4263,8 +4263,8 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:846 */
-  REGB0 = TAG_Int(145);
-  fra.me.REG[2] = NEW_ReduceAction693_parser___ReduceAction693___init(REGB0);
+  REGB0 = TAG_Int(144);
+  fra.me.REG[2] = NEW_ReduceAction689_parser___ReduceAction689___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:847 */
@@ -4273,7 +4273,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:848 */
-  REGB0 = TAG_Int(146);
+  REGB0 = TAG_Int(145);
   fra.me.REG[2] = NEW_ReduceAction695_parser___ReduceAction695___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -4283,7 +4283,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:850 */
-  REGB0 = TAG_Int(147);
+  REGB0 = TAG_Int(146);
   fra.me.REG[2] = NEW_ReduceAction697_parser___ReduceAction697___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -4293,7 +4293,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:852 */
-  REGB0 = TAG_Int(148);
+  REGB0 = TAG_Int(147);
   fra.me.REG[2] = NEW_ReduceAction699_parser___ReduceAction699___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -4303,57 +4303,57 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:854 */
-  REGB0 = TAG_Int(149);
-  fra.me.REG[2] = NEW_ReduceAction214_parser___ReduceAction214___init(REGB0);
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction701_parser___ReduceAction701___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:855 */
   REGB0 = TAG_Int(149);
-  fra.me.REG[2] = NEW_ReduceAction702_parser___ReduceAction702___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction215_parser___ReduceAction215___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:856 */
-  REGB0 = TAG_Int(150);
-  fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction382___init(REGB0);
+  REGB0 = TAG_Int(149);
+  fra.me.REG[2] = NEW_ReduceAction703_parser___ReduceAction703___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:857 */
   REGB0 = TAG_Int(150);
-  fra.me.REG[2] = NEW_ReduceAction704_parser___ReduceAction704___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction383_parser___ReduceAction383___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:858 */
-  REGB0 = TAG_Int(151);
-  fra.me.REG[2] = NEW_ReduceAction389_parser___ReduceAction389___init(REGB0);
+  REGB0 = TAG_Int(150);
+  fra.me.REG[2] = NEW_ReduceAction705_parser___ReduceAction705___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:859 */
   REGB0 = TAG_Int(151);
-  fra.me.REG[2] = NEW_ReduceAction706_parser___ReduceAction706___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction390___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:860 */
-  REGB0 = TAG_Int(152);
-  fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction382___init(REGB0);
+  REGB0 = TAG_Int(151);
+  fra.me.REG[2] = NEW_ReduceAction707_parser___ReduceAction707___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:861 */
   REGB0 = TAG_Int(152);
-  fra.me.REG[2] = NEW_ReduceAction704_parser___ReduceAction704___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction383_parser___ReduceAction383___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:862 */
-  REGB0 = TAG_Int(153);
-  fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction390___init(REGB0);
+  REGB0 = TAG_Int(152);
+  fra.me.REG[2] = NEW_ReduceAction705_parser___ReduceAction705___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:863 */
   REGB0 = TAG_Int(153);
-  fra.me.REG[2] = NEW_ReduceAction710_parser___ReduceAction710___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction391___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:864 */
-  REGB0 = TAG_Int(154);
+  REGB0 = TAG_Int(153);
   fra.me.REG[2] = NEW_ReduceAction711_parser___ReduceAction711___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -4363,7 +4363,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:866 */
-  REGB0 = TAG_Int(155);
+  REGB0 = TAG_Int(154);
   fra.me.REG[2] = NEW_ReduceAction713_parser___ReduceAction713___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -4372,6 +4372,11 @@ void parser___Parser___build_reduce_table(val_t p0){
   fra.me.REG[2] = NEW_ReduceAction714_parser___ReduceAction714___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:868 */
+  REGB0 = TAG_Int(155);
+  fra.me.REG[2] = NEW_ReduceAction715_parser___ReduceAction715___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   fra.me.REG[1] = NEW_Array_array___Array___with_items(fra.me.REG[1]);
   ATTR_parser___Parser____reduce_table(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -4387,7 +4392,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 = 898;
+  fra.me.line = 899;
   fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___visit;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -4402,7 +4407,7 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:900 */
+  /* ./parser//parser.nit:901 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -4416,25 +4421,25 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:901 */
+    /* ./parser//parser.nit:902 */
     goto label1;
   } else {
-    /* ./parser//parser.nit:902 */
+    /* ./parser//parser.nit:903 */
     REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_Token, ID_Token)) /*cast Token*/;
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser.nit:903 */
+      /* ./parser//parser.nit:904 */
       REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser, 903);
+        nit_abort("Reciever is null", NULL, LOCATE_parser, 904);
       }
       fra.me.REG[2] = CALL_parser_nodes___ANode___location(fra.me.REG[1])(fra.me.REG[1]);
-      /* ./parser//parser.nit:904 */
+      /* ./parser//parser.nit:905 */
       ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[2];
-      /* ./parser//parser.nit:907 */
+      /* ./parser//parser.nit:908 */
       REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 907);
+        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 908);
       }
       fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
       /* ./../lib/standard//collection//array.nit:234 */
@@ -4468,7 +4473,7 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           }
           /* ./../lib/standard//collection//array.nit:654 */
           fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
-          /* ./parser//parser.nit:908 */
+          /* ./parser//parser.nit:909 */
           ATTR_parser___Prod____first_location(fra.me.REG[5]) = fra.me.REG[2];
           /* ./../lib/standard//collection//array.nit:239 */
           REGB1 = TAG_Int(1);
@@ -4482,19 +4487,19 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
         }
       }
       label2: while(0);
-      /* ./parser//parser.nit:910 */
+      /* ./parser//parser.nit:911 */
       REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 910);
+        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 911);
       }
       fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
       CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[4])(fra.me.REG[4]);
-      /* ./parser//parser.nit:913 */
+      /* ./parser//parser.nit:914 */
       REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 913);
+        nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 914);
       }
       fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
       /* ./../lib/standard//collection//array.nit:234 */
@@ -4528,21 +4533,21 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           }
           /* ./../lib/standard//collection//array.nit:654 */
           fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
-          /* ./parser//parser.nit:916 */
-          fra.me.REG[6] = fra.me.REG[2];
           /* ./parser//parser.nit:917 */
-          fra.me.REG[7] = ATTR_parser___Prod____last_location(fra.me.REG[5]);
+          fra.me.REG[6] = fra.me.REG[2];
           /* ./parser//parser.nit:918 */
+          fra.me.REG[7] = ATTR_parser___Prod____last_location(fra.me.REG[5]);
+          /* ./parser//parser.nit:919 */
           fra.me.REG[8] = CALL_location___Location___file(fra.me.REG[6])(fra.me.REG[6]);
           REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
           if (UNTAG_Bool(REGB1)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser, 918);
+            nit_abort("Reciever is null", NULL, LOCATE_parser, 919);
           }
           REGB1 = CALL_location___Location___line_end(fra.me.REG[7])(fra.me.REG[7]);
           REGB2 = CALL_location___Location___line_start(fra.me.REG[6])(fra.me.REG[6]);
           REGB3 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser, 918);
+            nit_abort("Reciever is null", NULL, LOCATE_parser, 919);
           }
           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]);
@@ -4560,42 +4565,42 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
         }
       }
       label3: while(0);
-      /* ./parser//parser.nit:920 */
+      /* ./parser//parser.nit:921 */
       REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 920);
+        nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 921);
       }
       fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
       CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[2])(fra.me.REG[2]);
     } else {
-      /* ./parser//parser.nit:922 */
+      /* ./parser//parser.nit:923 */
       REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_Prod, ID_Prod)) /*cast Prod*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser, 922);
+        nit_abort("Assert failed", NULL, LOCATE_parser, 923);
       }
-      /* ./parser//parser.nit:923 */
+      /* ./parser//parser.nit:924 */
       REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 923);
+        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 924);
       }
       fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
       CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-      /* ./parser//parser.nit:925 */
-      fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
       /* ./parser//parser.nit:926 */
-      ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = NIT_NULL;
+      fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
       /* ./parser//parser.nit:927 */
+      ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = NIT_NULL;
+      /* ./parser//parser.nit:928 */
       REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser, 927);
+        nit_abort("Reciever is null", NULL, LOCATE_parser, 928);
       }
       CALL_parser_prod___ANode___visit_all(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-      /* ./parser//parser.nit:928 */
-      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
       /* ./parser//parser.nit:929 */
+      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
+      /* ./parser//parser.nit:930 */
       REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -4611,11 +4616,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:931 */
-      ATTR_parser___Prod____last_location(fra.me.REG[1]) = fra.me.REG[3];
       /* ./parser//parser.nit:932 */
-      fra.me.REG[2] = ATTR_parser___Prod____first_location(fra.me.REG[1]);
+      ATTR_parser___Prod____last_location(fra.me.REG[1]) = fra.me.REG[3];
       /* ./parser//parser.nit:933 */
+      fra.me.REG[2] = ATTR_parser___Prod____first_location(fra.me.REG[1]);
+      /* ./parser//parser.nit:934 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -4630,7 +4635,7 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
       }
       REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
       if (UNTAG_Bool(REGB0)) {
-        /* ./parser//parser.nit:935 */
+        /* ./parser//parser.nit:936 */
         REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
         } else {
@@ -4646,45 +4651,45 @@ 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, 935);
+          nit_abort("Assert failed", NULL, LOCATE_parser, 936);
         }
-        /* ./parser//parser.nit:937 */
+        /* ./parser//parser.nit:938 */
         REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 937);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 938);
         }
         fra.me.REG[4] = CALL_location___Location___file(fra.me.REG[2])(fra.me.REG[2]);
         REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 937);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 938);
         }
         REGB0 = CALL_location___Location___line_start(fra.me.REG[2])(fra.me.REG[2]);
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 937);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 938);
         }
         REGB4 = CALL_location___Location___line_end(fra.me.REG[3])(fra.me.REG[3]);
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 937);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 938);
         }
         REGB3 = CALL_location___Location___column_start(fra.me.REG[2])(fra.me.REG[2]);
         REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 937);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 938);
         }
         REGB2 = CALL_location___Location___column_end(fra.me.REG[3])(fra.me.REG[3]);
         fra.me.REG[4] = NEW_Location_location___Location___init(fra.me.REG[4], REGB0, REGB4, REGB3, REGB2);
         REGB2 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 937);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 938);
         }
         CALL_parser_nodes___Prod___location__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-        /* ./parser//parser.nit:939 */
+        /* ./parser//parser.nit:940 */
         REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 939);
+          nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 940);
         }
         fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
         /* ./../lib/standard//collection//array.nit:234 */
@@ -4718,30 +4723,30 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
             }
             /* ./../lib/standard//collection//array.nit:654 */
             fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB2)];
-            /* ./parser//parser.nit:942 */
+            /* ./parser//parser.nit:943 */
             REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
             if (UNTAG_Bool(REGB3)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 942);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 943);
             }
             fra.me.REG[6] = CALL_location___Location___file(fra.me.REG[2])(fra.me.REG[2]);
             REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
             if (UNTAG_Bool(REGB3)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 942);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 943);
             }
             REGB3 = CALL_location___Location___line_start(fra.me.REG[2])(fra.me.REG[2]);
             REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
             if (UNTAG_Bool(REGB4)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 942);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 943);
             }
             REGB4 = CALL_location___Location___line_start(fra.me.REG[2])(fra.me.REG[2]);
             REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
             if (UNTAG_Bool(REGB0)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 942);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 943);
             }
             REGB0 = CALL_location___Location___column_start(fra.me.REG[2])(fra.me.REG[2]);
             REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
             if (UNTAG_Bool(REGB1)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 942);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 943);
             }
             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);
@@ -4758,19 +4763,19 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           }
         }
         label4: while(0);
-        /* ./parser//parser.nit:944 */
+        /* ./parser//parser.nit:945 */
         REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 944);
+          nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 945);
         }
         fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
         CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[2])(fra.me.REG[2]);
-        /* ./parser//parser.nit:946 */
+        /* ./parser//parser.nit:947 */
         REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 946);
+          nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 947);
         }
         fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
         /* ./../lib/standard//collection//array.nit:234 */
@@ -4804,30 +4809,30 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
             }
             /* ./../lib/standard//collection//array.nit:654 */
             fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB2)];
-            /* ./parser//parser.nit:949 */
+            /* ./parser//parser.nit:950 */
             REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
             if (UNTAG_Bool(REGB1)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 949);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 950);
             }
             fra.me.REG[6] = CALL_location___Location___file(fra.me.REG[3])(fra.me.REG[3]);
             REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
             if (UNTAG_Bool(REGB1)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 949);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 950);
             }
             REGB1 = CALL_location___Location___line_end(fra.me.REG[3])(fra.me.REG[3]);
             REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
             if (UNTAG_Bool(REGB0)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 949);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 950);
             }
             REGB0 = CALL_location___Location___line_end(fra.me.REG[3])(fra.me.REG[3]);
             REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
             if (UNTAG_Bool(REGB4)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 949);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 950);
             }
             REGB4 = CALL_location___Location___column_end(fra.me.REG[3])(fra.me.REG[3]);
             REGB3 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
             if (UNTAG_Bool(REGB3)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 949);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 950);
             }
             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);
@@ -4844,16 +4849,16 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           }
         }
         label5: while(0);
-        /* ./parser//parser.nit:951 */
+        /* ./parser//parser.nit:952 */
         REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 951);
+          nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 952);
         }
         fra.me.REG[8] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
         CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[8])(fra.me.REG[8]);
       } else {
-        /* ./parser//parser.nit:955 */
+        /* ./parser//parser.nit:956 */
         REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
@@ -4867,20 +4872,20 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           }
         }
         if (UNTAG_Bool(REGB2)) {
-          /* ./parser//parser.nit:957 */
+          /* ./parser//parser.nit:958 */
           REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB2)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 957);
+            nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 958);
           }
           fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
           CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
         } else {
-          /* ./parser//parser.nit:960 */
+          /* ./parser//parser.nit:961 */
           REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB2)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 960);
+            nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 961);
           }
           fra.me.REG[0] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
           CALL_abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
@@ -4899,13 +4904,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 = 966;
+  fra.me.line = 967;
   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:966 */
+  /* ./parser//parser.nit:967 */
   CALL_parser_prod___Visitor___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
   init_table[itpos2] = 1;
@@ -4916,12 +4921,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 = 971;
+  fra.me.line = 972;
   fra.me.meth = LOCATE_parser___ReduceAction___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./parser//parser.nit:971 */
-  nit_abort("Deferred method called", NULL, LOCATE_parser, 971);
+  /* ./parser//parser.nit:972 */
+  nit_abort("Deferred method called", NULL, LOCATE_parser, 972);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -4931,7 +4936,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 = 972;
+  fra.me.line = 973;
   fra.me.meth = LOCATE_parser___ReduceAction___concat;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4941,15 +4946,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:974 */
+  /* ./parser//parser.nit:975 */
   REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[1])(fra.me.REG[1]);
   if (UNTAG_Bool(REGB0)) {
     fra.me.REG[0] = fra.me.REG[2];
     goto label1;
   }
-  /* ./parser//parser.nit:975 */
-  CALL_abstract_collection___Sequence___append(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:976 */
+  CALL_abstract_collection___Sequence___append(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:977 */
   fra.me.REG[0] = fra.me.REG[1];
   goto label1;
   label1: while(0);
@@ -4977,7 +4982,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 = 982;
+  fra.me.line = 983;
   fra.me.meth = LOCATE_parser___ReduceAction0___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -4988,21 +4993,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:984 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:985 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:986 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  fra.me.REG[3] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:987 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:988 */
   fra.me.REG[4] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  /* ./parser//parser.nit:992 */
-  fra.me.REG[2] = fra.me.REG[4];
   /* ./parser//parser.nit:993 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:994 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction0____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 993);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 994);
   }
   REGB0 = ATTR_parser___ReduceAction0____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5018,7 +5023,7 @@ void parser___ReduceAction0___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos4]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 996;
+  fra.me.line = 997;
   fra.me.meth = LOCATE_parser___ReduceAction0___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5026,7 +5031,7 @@ void parser___ReduceAction0___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:996 */
+  /* ./parser//parser.nit:997 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction0____goto(fra.me.REG[1]) = REGB0;
@@ -5040,7 +5045,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 = 1000;
+  fra.me.line = 1001;
   fra.me.meth = LOCATE_parser___ReduceAction1___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -5052,29 +5057,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:1002 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1003 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1004 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1005 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1006 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1007 */
+  /* ./parser//parser.nit:1008 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1007);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1008);
   }
-  /* ./parser//parser.nit:1008 */
+  /* ./parser//parser.nit:1009 */
   fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1013 */
-  fra.me.REG[2] = fra.me.REG[5];
   /* ./parser//parser.nit:1014 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:1015 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction1____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1014);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1015);
   }
   REGB0 = ATTR_parser___ReduceAction1____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5090,7 +5095,7 @@ void parser___ReduceAction1___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos5]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1017;
+  fra.me.line = 1018;
   fra.me.meth = LOCATE_parser___ReduceAction1___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5098,7 +5103,7 @@ void parser___ReduceAction1___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1017 */
+  /* ./parser//parser.nit:1018 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction1____goto(fra.me.REG[1]) = REGB0;
@@ -5112,7 +5117,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 = 1021;
+  fra.me.line = 1022;
   fra.me.meth = LOCATE_parser___ReduceAction2___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -5124,32 +5129,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:1023 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1024 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1025 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1026 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1027 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1028 */
+  /* ./parser//parser.nit:1029 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1028);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1029);
   }
-  /* ./parser//parser.nit:1029 */
+  /* ./parser//parser.nit:1030 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
   fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:1030 */
+  /* ./parser//parser.nit:1031 */
   fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1035 */
-  fra.me.REG[2] = fra.me.REG[5];
   /* ./parser//parser.nit:1036 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:1037 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction2____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1036);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1037);
   }
   REGB0 = ATTR_parser___ReduceAction2____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5165,7 +5170,7 @@ void parser___ReduceAction2___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos6]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1039;
+  fra.me.line = 1040;
   fra.me.meth = LOCATE_parser___ReduceAction2___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5173,7 +5178,7 @@ void parser___ReduceAction2___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1039 */
+  /* ./parser//parser.nit:1040 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction2____goto(fra.me.REG[1]) = REGB0;
@@ -5187,7 +5192,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 = 1043;
+  fra.me.line = 1044;
   fra.me.meth = LOCATE_parser___ReduceAction3___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5200,40 +5205,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:1045 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1046 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1047 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1048 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1049 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1050 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1051 */
+  /* ./parser//parser.nit:1052 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1051);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1052);
   }
-  /* ./parser//parser.nit:1053 */
+  /* ./parser//parser.nit:1054 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1053);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1054);
   }
-  /* ./parser//parser.nit:1054 */
+  /* ./parser//parser.nit:1055 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:1055 */
+  /* ./parser//parser.nit:1056 */
   fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1060 */
-  fra.me.REG[2] = fra.me.REG[6];
   /* ./parser//parser.nit:1061 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1062 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction3____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1061);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1062);
   }
   REGB0 = ATTR_parser___ReduceAction3____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5249,7 +5254,7 @@ void parser___ReduceAction3___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos7]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1064;
+  fra.me.line = 1065;
   fra.me.meth = LOCATE_parser___ReduceAction3___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5257,7 +5262,7 @@ void parser___ReduceAction3___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1064 */
+  /* ./parser//parser.nit:1065 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction3____goto(fra.me.REG[1]) = REGB0;
@@ -5271,7 +5276,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 = 1068;
+  fra.me.line = 1069;
   fra.me.meth = LOCATE_parser___ReduceAction4___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -5283,32 +5288,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:1070 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1071 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1072 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1073 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1074 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1075 */
+  /* ./parser//parser.nit:1076 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1075);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1076);
   }
-  /* ./parser//parser.nit:1076 */
+  /* ./parser//parser.nit:1077 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:1077 */
+  /* ./parser//parser.nit:1078 */
   fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1082 */
-  fra.me.REG[2] = fra.me.REG[5];
   /* ./parser//parser.nit:1083 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:1084 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction4____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1083);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1084);
   }
   REGB0 = ATTR_parser___ReduceAction4____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5324,7 +5329,7 @@ void parser___ReduceAction4___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos8]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1086;
+  fra.me.line = 1087;
   fra.me.meth = LOCATE_parser___ReduceAction4___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5332,7 +5337,7 @@ void parser___ReduceAction4___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1086 */
+  /* ./parser//parser.nit:1087 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction4____goto(fra.me.REG[1]) = REGB0;
@@ -5346,7 +5351,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 = 1090;
+  fra.me.line = 1091;
   fra.me.meth = LOCATE_parser___ReduceAction5___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5359,40 +5364,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:1092 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1093 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1094 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1095 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1096 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1097 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1098 */
+  /* ./parser//parser.nit:1099 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1098);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1099);
   }
-  /* ./parser//parser.nit:1100 */
+  /* ./parser//parser.nit:1101 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1100);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1101);
   }
-  /* ./parser//parser.nit:1101 */
+  /* ./parser//parser.nit:1102 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
   fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:1102 */
+  /* ./parser//parser.nit:1103 */
   fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1107 */
-  fra.me.REG[2] = fra.me.REG[6];
   /* ./parser//parser.nit:1108 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1109 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction5____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1108);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1109);
   }
   REGB0 = ATTR_parser___ReduceAction5____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5408,7 +5413,7 @@ void parser___ReduceAction5___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos9]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1111;
+  fra.me.line = 1112;
   fra.me.meth = LOCATE_parser___ReduceAction5___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5416,7 +5421,7 @@ void parser___ReduceAction5___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1111 */
+  /* ./parser//parser.nit:1112 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction5____goto(fra.me.REG[1]) = REGB0;
@@ -5430,7 +5435,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 = 1115;
+  fra.me.line = 1116;
   fra.me.meth = LOCATE_parser___ReduceAction6___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5443,43 +5448,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:1117 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1118 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1119 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1120 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1121 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1122 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1123 */
+  /* ./parser//parser.nit:1124 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1123);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1124);
   }
-  /* ./parser//parser.nit:1124 */
+  /* ./parser//parser.nit:1125 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:1126 */
+  /* ./parser//parser.nit:1127 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1126);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1127);
   }
-  /* ./parser//parser.nit:1127 */
+  /* ./parser//parser.nit:1128 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
   fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:1128 */
+  /* ./parser//parser.nit:1129 */
   fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1133 */
-  fra.me.REG[2] = fra.me.REG[6];
   /* ./parser//parser.nit:1134 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1135 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction6____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1134);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1135);
   }
   REGB0 = ATTR_parser___ReduceAction6____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5495,7 +5500,7 @@ void parser___ReduceAction6___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos10]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1137;
+  fra.me.line = 1138;
   fra.me.meth = LOCATE_parser___ReduceAction6___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5503,7 +5508,7 @@ void parser___ReduceAction6___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1137 */
+  /* ./parser//parser.nit:1138 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction6____goto(fra.me.REG[1]) = REGB0;
@@ -5517,7 +5522,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 = 1141;
+  fra.me.line = 1142;
   fra.me.meth = LOCATE_parser___ReduceAction7___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -5531,51 +5536,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:1143 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1144 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1145 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1146 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1147 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1148 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1149 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1150 */
+  /* ./parser//parser.nit:1151 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1150);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1151);
   }
-  /* ./parser//parser.nit:1152 */
+  /* ./parser//parser.nit:1153 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1152);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1153);
   }
-  /* ./parser//parser.nit:1153 */
+  /* ./parser//parser.nit:1154 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1155 */
+  /* ./parser//parser.nit:1156 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1155);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1156);
   }
-  /* ./parser//parser.nit:1156 */
+  /* ./parser//parser.nit:1157 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
   fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:1157 */
+  /* ./parser//parser.nit:1158 */
   fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1162 */
-  fra.me.REG[2] = fra.me.REG[7];
   /* ./parser//parser.nit:1163 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1164 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction7____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1163);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1164);
   }
   REGB0 = ATTR_parser___ReduceAction7____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5591,7 +5596,7 @@ void parser___ReduceAction7___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos11]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1166;
+  fra.me.line = 1167;
   fra.me.meth = LOCATE_parser___ReduceAction7___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5599,7 +5604,7 @@ void parser___ReduceAction7___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1166 */
+  /* ./parser//parser.nit:1167 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction7____goto(fra.me.REG[1]) = REGB0;
@@ -5614,7 +5619,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 = 1170;
+  fra.me.line = 1171;
   fra.me.meth = LOCATE_parser___ReduceAction8___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5627,28 +5632,28 @@ void parser___ReduceAction8___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1172 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1173 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1174 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1175 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:1176 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1177 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1178 */
+  /* ./parser//parser.nit:1179 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1178);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1179);
   }
-  /* ./parser//parser.nit:1179 */
+  /* ./parser//parser.nit:1180 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
   fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:1180 */
+  /* ./parser//parser.nit:1181 */
   fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* ./parser//parser.nit:1183 */
+  /* ./parser//parser.nit:1184 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5663,18 +5668,18 @@ void parser___ReduceAction8___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1184 */
+    /* ./parser//parser.nit:1185 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
-  /* ./parser//parser.nit:1186 */
+  /* ./parser//parser.nit:1187 */
   fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1191 */
-  fra.me.REG[2] = fra.me.REG[5];
   /* ./parser//parser.nit:1192 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:1193 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction8____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1192);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1193);
   }
   REGB0 = ATTR_parser___ReduceAction8____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5690,7 +5695,7 @@ void parser___ReduceAction8___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos12]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1195;
+  fra.me.line = 1196;
   fra.me.meth = LOCATE_parser___ReduceAction8___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5698,7 +5703,7 @@ void parser___ReduceAction8___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1195 */
+  /* ./parser//parser.nit:1196 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction8____goto(fra.me.REG[1]) = REGB0;
@@ -5713,7 +5718,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 = 1199;
+  fra.me.line = 1200;
   fra.me.meth = LOCATE_parser___ReduceAction9___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -5727,36 +5732,36 @@ void parser___ReduceAction9___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1201 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1202 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1203 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1204 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1205 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1206 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1207 */
+  /* ./parser//parser.nit:1208 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1207);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1208);
   }
-  /* ./parser//parser.nit:1208 */
+  /* ./parser//parser.nit:1209 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1210 */
+  /* ./parser//parser.nit:1211 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1210);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1211);
   }
-  /* ./parser//parser.nit:1211 */
+  /* ./parser//parser.nit:1212 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
   fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:1212 */
+  /* ./parser//parser.nit:1213 */
   fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* ./parser//parser.nit:1215 */
+  /* ./parser//parser.nit:1216 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5771,18 +5776,18 @@ void parser___ReduceAction9___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1216 */
+    /* ./parser//parser.nit:1217 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  /* ./parser//parser.nit:1218 */
+  /* ./parser//parser.nit:1219 */
   fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1223 */
-  fra.me.REG[2] = fra.me.REG[6];
   /* ./parser//parser.nit:1224 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1225 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction9____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1224);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1225);
   }
   REGB0 = ATTR_parser___ReduceAction9____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5798,7 +5803,7 @@ void parser___ReduceAction9___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos13]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1227;
+  fra.me.line = 1228;
   fra.me.meth = LOCATE_parser___ReduceAction9___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5806,7 +5811,7 @@ void parser___ReduceAction9___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1227 */
+  /* ./parser//parser.nit:1228 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction9____goto(fra.me.REG[1]) = REGB0;
@@ -5821,7 +5826,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 = 1231;
+  fra.me.line = 1232;
   fra.me.meth = LOCATE_parser___ReduceAction10___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5834,39 +5839,39 @@ void parser___ReduceAction10___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1233 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1234 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1235 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1236 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1237 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1238 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1239 */
+  /* ./parser//parser.nit:1240 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1239);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1240);
   }
-  /* ./parser//parser.nit:1240 */
+  /* ./parser//parser.nit:1241 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:1241 */
+  /* ./parser//parser.nit:1242 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1243 */
+  /* ./parser//parser.nit:1244 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1243);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1244);
   }
-  /* ./parser//parser.nit:1244 */
+  /* ./parser//parser.nit:1245 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
   fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:1245 */
+  /* ./parser//parser.nit:1246 */
   fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* ./parser//parser.nit:1248 */
+  /* ./parser//parser.nit:1249 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5881,18 +5886,18 @@ void parser___ReduceAction10___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1249 */
+    /* ./parser//parser.nit:1250 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:1251 */
+  /* ./parser//parser.nit:1252 */
   fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1256 */
-  fra.me.REG[2] = fra.me.REG[6];
   /* ./parser//parser.nit:1257 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1258 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction10____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1257);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1258);
   }
   REGB0 = ATTR_parser___ReduceAction10____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5908,7 +5913,7 @@ void parser___ReduceAction10___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos14]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1260;
+  fra.me.line = 1261;
   fra.me.meth = LOCATE_parser___ReduceAction10___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5916,7 +5921,7 @@ void parser___ReduceAction10___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1260 */
+  /* ./parser//parser.nit:1261 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction10____goto(fra.me.REG[1]) = REGB0;
@@ -5931,7 +5936,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 = 1264;
+  fra.me.line = 1265;
   fra.me.meth = LOCATE_parser___ReduceAction11___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -5945,47 +5950,47 @@ void parser___ReduceAction11___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1266 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1267 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1268 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1269 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1270 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1271 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1272 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1273 */
+  /* ./parser//parser.nit:1274 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1273);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1274);
   }
-  /* ./parser//parser.nit:1275 */
+  /* ./parser//parser.nit:1276 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1275);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1276);
   }
-  /* ./parser//parser.nit:1276 */
+  /* ./parser//parser.nit:1277 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1277 */
+  /* ./parser//parser.nit:1278 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1279 */
+  /* ./parser//parser.nit:1280 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1279);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1280);
   }
-  /* ./parser//parser.nit:1280 */
+  /* ./parser//parser.nit:1281 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
   fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:1281 */
+  /* ./parser//parser.nit:1282 */
   fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* ./parser//parser.nit:1284 */
+  /* ./parser//parser.nit:1285 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6000,18 +6005,18 @@ void parser___ReduceAction11___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1285 */
+    /* ./parser//parser.nit:1286 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:1287 */
+  /* ./parser//parser.nit:1288 */
   fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1292 */
-  fra.me.REG[2] = fra.me.REG[7];
   /* ./parser//parser.nit:1293 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1294 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction11____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1293);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1294);
   }
   REGB0 = ATTR_parser___ReduceAction11____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6027,7 +6032,7 @@ void parser___ReduceAction11___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos15]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1296;
+  fra.me.line = 1297;
   fra.me.meth = LOCATE_parser___ReduceAction11___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6035,7 +6040,7 @@ void parser___ReduceAction11___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1296 */
+  /* ./parser//parser.nit:1297 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction11____goto(fra.me.REG[1]) = REGB0;
@@ -6050,7 +6055,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 = 1300;
+  fra.me.line = 1301;
   fra.me.meth = LOCATE_parser___ReduceAction12___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6064,39 +6069,39 @@ void parser___ReduceAction12___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1302 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1303 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1304 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1305 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1306 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1307 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1308 */
+  /* ./parser//parser.nit:1309 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1308);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1309);
   }
-  /* ./parser//parser.nit:1309 */
+  /* ./parser//parser.nit:1310 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1311 */
+  /* ./parser//parser.nit:1312 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1311);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1312);
   }
-  /* ./parser//parser.nit:1312 */
+  /* ./parser//parser.nit:1313 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
   fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:1313 */
+  /* ./parser//parser.nit:1314 */
   fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* ./parser//parser.nit:1316 */
+  /* ./parser//parser.nit:1317 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1317 */
+  /* ./parser//parser.nit:1318 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6111,18 +6116,18 @@ void parser___ReduceAction12___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1318 */
+    /* ./parser//parser.nit:1319 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  /* ./parser//parser.nit:1320 */
+  /* ./parser//parser.nit:1321 */
   fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1325 */
-  fra.me.REG[2] = fra.me.REG[6];
   /* ./parser//parser.nit:1326 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1327 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction12____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1326);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1327);
   }
   REGB0 = ATTR_parser___ReduceAction12____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6138,7 +6143,7 @@ void parser___ReduceAction12___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos16]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1329;
+  fra.me.line = 1330;
   fra.me.meth = LOCATE_parser___ReduceAction12___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6146,7 +6151,7 @@ void parser___ReduceAction12___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1329 */
+  /* ./parser//parser.nit:1330 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction12____goto(fra.me.REG[1]) = REGB0;
@@ -6161,7 +6166,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 = 1333;
+  fra.me.line = 1334;
   fra.me.meth = LOCATE_parser___ReduceAction13___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -6176,47 +6181,47 @@ void parser___ReduceAction13___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1335 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1336 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1337 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1338 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1339 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1340 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1341 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1342 */
+  /* ./parser//parser.nit:1343 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1342);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1343);
   }
-  /* ./parser//parser.nit:1344 */
+  /* ./parser//parser.nit:1345 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1344);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1345);
   }
-  /* ./parser//parser.nit:1345 */
+  /* ./parser//parser.nit:1346 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1347 */
+  /* ./parser//parser.nit:1348 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1347);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1348);
   }
-  /* ./parser//parser.nit:1348 */
+  /* ./parser//parser.nit:1349 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[3]);
   fra.me.REG[8] = fra.me.REG[3];
-  /* ./parser//parser.nit:1349 */
+  /* ./parser//parser.nit:1350 */
   fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* ./parser//parser.nit:1352 */
+  /* ./parser//parser.nit:1353 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
   fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:1353 */
+  /* ./parser//parser.nit:1354 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6231,18 +6236,18 @@ void parser___ReduceAction13___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1354 */
+    /* ./parser//parser.nit:1355 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  /* ./parser//parser.nit:1356 */
+  /* ./parser//parser.nit:1357 */
   fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1361 */
-  fra.me.REG[2] = fra.me.REG[7];
   /* ./parser//parser.nit:1362 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1363 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction13____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1362);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1363);
   }
   REGB0 = ATTR_parser___ReduceAction13____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6258,7 +6263,7 @@ void parser___ReduceAction13___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos17]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1365;
+  fra.me.line = 1366;
   fra.me.meth = LOCATE_parser___ReduceAction13___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6266,7 +6271,7 @@ void parser___ReduceAction13___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1365 */
+  /* ./parser//parser.nit:1366 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction13____goto(fra.me.REG[1]) = REGB0;
@@ -6281,7 +6286,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 = 1369;
+  fra.me.line = 1370;
   fra.me.meth = LOCATE_parser___ReduceAction14___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6295,50 +6300,50 @@ void parser___ReduceAction14___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1371 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1372 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1373 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1374 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1375 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1376 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1377 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1378 */
+  /* ./parser//parser.nit:1379 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1378);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1379);
   }
-  /* ./parser//parser.nit:1379 */
+  /* ./parser//parser.nit:1380 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[5]);
   fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:1381 */
+  /* ./parser//parser.nit:1382 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1381);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1382);
   }
-  /* ./parser//parser.nit:1382 */
+  /* ./parser//parser.nit:1383 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1384 */
+  /* ./parser//parser.nit:1385 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1384);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1385);
   }
-  /* ./parser//parser.nit:1385 */
+  /* ./parser//parser.nit:1386 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:1386 */
+  /* ./parser//parser.nit:1387 */
   fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1389 */
+  /* ./parser//parser.nit:1390 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
   fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:1390 */
+  /* ./parser//parser.nit:1391 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6353,18 +6358,18 @@ void parser___ReduceAction14___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1391 */
+    /* ./parser//parser.nit:1392 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1393 */
+  /* ./parser//parser.nit:1394 */
   fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1398 */
-  fra.me.REG[2] = fra.me.REG[7];
   /* ./parser//parser.nit:1399 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1400 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction14____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1399);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1400);
   }
   REGB0 = ATTR_parser___ReduceAction14____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6380,7 +6385,7 @@ void parser___ReduceAction14___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos18]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1402;
+  fra.me.line = 1403;
   fra.me.meth = LOCATE_parser___ReduceAction14___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6388,7 +6393,7 @@ void parser___ReduceAction14___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1402 */
+  /* ./parser//parser.nit:1403 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction14____goto(fra.me.REG[1]) = REGB0;
@@ -6403,7 +6408,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 = 1406;
+  fra.me.line = 1407;
   fra.me.meth = LOCATE_parser___ReduceAction15___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -6418,58 +6423,58 @@ void parser___ReduceAction15___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1408 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1409 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1410 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1411 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1412 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1413 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1414 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1415 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1416 */
+  /* ./parser//parser.nit:1417 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1416);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1417);
   }
-  /* ./parser//parser.nit:1418 */
+  /* ./parser//parser.nit:1419 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1418);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1419);
   }
-  /* ./parser//parser.nit:1419 */
+  /* ./parser//parser.nit:1420 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
   fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:1421 */
+  /* ./parser//parser.nit:1422 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1421);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1422);
   }
-  /* ./parser//parser.nit:1422 */
+  /* ./parser//parser.nit:1423 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1424 */
+  /* ./parser//parser.nit:1425 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1424);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1425);
   }
-  /* ./parser//parser.nit:1425 */
+  /* ./parser//parser.nit:1426 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:1426 */
+  /* ./parser//parser.nit:1427 */
   fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1429 */
+  /* ./parser//parser.nit:1430 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[4]);
   fra.me.REG[8] = fra.me.REG[4];
-  /* ./parser//parser.nit:1430 */
+  /* ./parser//parser.nit:1431 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6484,18 +6489,18 @@ void parser___ReduceAction15___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1431 */
+    /* ./parser//parser.nit:1432 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1433 */
+  /* ./parser//parser.nit:1434 */
   fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1438 */
-  fra.me.REG[2] = fra.me.REG[8];
   /* ./parser//parser.nit:1439 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* ./parser//parser.nit:1440 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction15____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1439);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1440);
   }
   REGB0 = ATTR_parser___ReduceAction15____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6511,7 +6516,7 @@ void parser___ReduceAction15___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos19]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1442;
+  fra.me.line = 1443;
   fra.me.meth = LOCATE_parser___ReduceAction15___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6519,7 +6524,7 @@ void parser___ReduceAction15___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1442 */
+  /* ./parser//parser.nit:1443 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction15____goto(fra.me.REG[1]) = REGB0;
@@ -6534,7 +6539,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 = 1446;
+  fra.me.line = 1447;
   fra.me.meth = LOCATE_parser___ReduceAction16___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -6546,21 +6551,21 @@ void parser___ReduceAction16___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1448 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1449 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1450 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1451 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1452 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1453 */
+  /* ./parser//parser.nit:1454 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1453);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1454);
   }
-  /* ./parser//parser.nit:1454 */
+  /* ./parser//parser.nit:1455 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6575,18 +6580,18 @@ void parser___ReduceAction16___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1455 */
+    /* ./parser//parser.nit:1456 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1457 */
+  /* ./parser//parser.nit:1458 */
   fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1462 */
-  fra.me.REG[2] = fra.me.REG[5];
   /* ./parser//parser.nit:1463 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:1464 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction16____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1463);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1464);
   }
   REGB0 = ATTR_parser___ReduceAction16____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6602,7 +6607,7 @@ void parser___ReduceAction16___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos20]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1466;
+  fra.me.line = 1467;
   fra.me.meth = LOCATE_parser___ReduceAction16___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6610,7 +6615,7 @@ void parser___ReduceAction16___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1466 */
+  /* ./parser//parser.nit:1467 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction16____goto(fra.me.REG[1]) = REGB0;
@@ -6625,7 +6630,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 = 1470;
+  fra.me.line = 1471;
   fra.me.meth = LOCATE_parser___ReduceAction17___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -6638,29 +6643,29 @@ void parser___ReduceAction17___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1472 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1473 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1474 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1475 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1476 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1477 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1478 */
+  /* ./parser//parser.nit:1479 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1478);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1479);
   }
-  /* ./parser//parser.nit:1480 */
+  /* ./parser//parser.nit:1481 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1480);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1481);
   }
-  /* ./parser//parser.nit:1481 */
+  /* ./parser//parser.nit:1482 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6675,18 +6680,18 @@ void parser___ReduceAction17___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1482 */
+    /* ./parser//parser.nit:1483 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1484 */
+  /* ./parser//parser.nit:1485 */
   fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1489 */
-  fra.me.REG[2] = fra.me.REG[6];
   /* ./parser//parser.nit:1490 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1491 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction17____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1490);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1491);
   }
   REGB0 = ATTR_parser___ReduceAction17____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6702,7 +6707,7 @@ void parser___ReduceAction17___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos21]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1493;
+  fra.me.line = 1494;
   fra.me.meth = LOCATE_parser___ReduceAction17___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6710,7 +6715,7 @@ void parser___ReduceAction17___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1493 */
+  /* ./parser//parser.nit:1494 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction17____goto(fra.me.REG[1]) = REGB0;
@@ -6725,7 +6730,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 = 1497;
+  fra.me.line = 1498;
   fra.me.meth = LOCATE_parser___ReduceAction18___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -6738,32 +6743,32 @@ void parser___ReduceAction18___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1499 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1500 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1501 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1502 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1503 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1504 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1505 */
+  /* ./parser//parser.nit:1506 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1505);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1506);
   }
-  /* ./parser//parser.nit:1506 */
+  /* ./parser//parser.nit:1507 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:1508 */
+  /* ./parser//parser.nit:1509 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1508);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1509);
   }
-  /* ./parser//parser.nit:1509 */
+  /* ./parser//parser.nit:1510 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6778,18 +6783,18 @@ void parser___ReduceAction18___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1510 */
+    /* ./parser//parser.nit:1511 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1512 */
+  /* ./parser//parser.nit:1513 */
   fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1517 */
-  fra.me.REG[2] = fra.me.REG[6];
   /* ./parser//parser.nit:1518 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1519 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction18____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1518);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1519);
   }
   REGB0 = ATTR_parser___ReduceAction18____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6805,7 +6810,7 @@ void parser___ReduceAction18___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos22]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1521;
+  fra.me.line = 1522;
   fra.me.meth = LOCATE_parser___ReduceAction18___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6813,7 +6818,7 @@ void parser___ReduceAction18___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1521 */
+  /* ./parser//parser.nit:1522 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction18____goto(fra.me.REG[1]) = REGB0;
@@ -6828,7 +6833,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 = 1525;
+  fra.me.line = 1526;
   fra.me.meth = LOCATE_parser___ReduceAction19___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6842,40 +6847,40 @@ void parser___ReduceAction19___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1527 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1528 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1529 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1530 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1531 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1532 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1533 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1534 */
+  /* ./parser//parser.nit:1535 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1534);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1535);
   }
-  /* ./parser//parser.nit:1536 */
+  /* ./parser//parser.nit:1537 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1536);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1537);
   }
-  /* ./parser//parser.nit:1537 */
+  /* ./parser//parser.nit:1538 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1539 */
+  /* ./parser//parser.nit:1540 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1539);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1540);
   }
-  /* ./parser//parser.nit:1540 */
+  /* ./parser//parser.nit:1541 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6890,18 +6895,18 @@ void parser___ReduceAction19___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1541 */
+    /* ./parser//parser.nit:1542 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1543 */
+  /* ./parser//parser.nit:1544 */
   fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1548 */
-  fra.me.REG[2] = fra.me.REG[7];
   /* ./parser//parser.nit:1549 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1550 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction19____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1549);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1550);
   }
   REGB0 = ATTR_parser___ReduceAction19____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6917,7 +6922,7 @@ void parser___ReduceAction19___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos23]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1552;
+  fra.me.line = 1553;
   fra.me.meth = LOCATE_parser___ReduceAction19___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6925,7 +6930,7 @@ void parser___ReduceAction19___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1552 */
+  /* ./parser//parser.nit:1553 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction19____goto(fra.me.REG[1]) = REGB0;
@@ -6940,7 +6945,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 = 1556;
+  fra.me.line = 1557;
   fra.me.meth = LOCATE_parser___ReduceAction20___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -6953,32 +6958,32 @@ void parser___ReduceAction20___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1558 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1559 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1560 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1561 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1562 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1563 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1564 */
+  /* ./parser//parser.nit:1565 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1564);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1565);
   }
-  /* ./parser//parser.nit:1566 */
+  /* ./parser//parser.nit:1567 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1566);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1567);
   }
-  /* ./parser//parser.nit:1567 */
+  /* ./parser//parser.nit:1568 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1568 */
+  /* ./parser//parser.nit:1569 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6993,18 +6998,18 @@ void parser___ReduceAction20___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1569 */
+    /* ./parser//parser.nit:1570 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1571 */
+  /* ./parser//parser.nit:1572 */
   fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1576 */
-  fra.me.REG[2] = fra.me.REG[6];
   /* ./parser//parser.nit:1577 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1578 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction20____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1577);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1578);
   }
   REGB0 = ATTR_parser___ReduceAction20____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7020,7 +7025,7 @@ void parser___ReduceAction20___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos24]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1580;
+  fra.me.line = 1581;
   fra.me.meth = LOCATE_parser___ReduceAction20___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7028,7 +7033,7 @@ void parser___ReduceAction20___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1580 */
+  /* ./parser//parser.nit:1581 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction20____goto(fra.me.REG[1]) = REGB0;
@@ -7043,7 +7048,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 = 1584;
+  fra.me.line = 1585;
   fra.me.meth = LOCATE_parser___ReduceAction21___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -7057,40 +7062,40 @@ void parser___ReduceAction21___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1586 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1587 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1588 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1589 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1590 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1591 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1592 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1593 */
+  /* ./parser//parser.nit:1594 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1593);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1594);
   }
-  /* ./parser//parser.nit:1595 */
+  /* ./parser//parser.nit:1596 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1595);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1596);
   }
-  /* ./parser//parser.nit:1597 */
+  /* ./parser//parser.nit:1598 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1597);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1598);
   }
-  /* ./parser//parser.nit:1598 */
+  /* ./parser//parser.nit:1599 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
   fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:1599 */
+  /* ./parser//parser.nit:1600 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7105,18 +7110,18 @@ void parser___ReduceAction21___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1600 */
+    /* ./parser//parser.nit:1601 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1602 */
+  /* ./parser//parser.nit:1603 */
   fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1607 */
-  fra.me.REG[2] = fra.me.REG[7];
   /* ./parser//parser.nit:1608 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1609 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction21____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1608);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1609);
   }
   REGB0 = ATTR_parser___ReduceAction21____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7132,7 +7137,7 @@ void parser___ReduceAction21___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos25]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1611;
+  fra.me.line = 1612;
   fra.me.meth = LOCATE_parser___ReduceAction21___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7140,7 +7145,7 @@ void parser___ReduceAction21___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1611 */
+  /* ./parser//parser.nit:1612 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction21____goto(fra.me.REG[1]) = REGB0;
@@ -7155,7 +7160,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 = 1615;
+  fra.me.line = 1616;
   fra.me.meth = LOCATE_parser___ReduceAction22___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -7169,43 +7174,43 @@ void parser___ReduceAction22___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1617 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1618 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1619 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1620 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1621 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1622 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1623 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1624 */
+  /* ./parser//parser.nit:1625 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1624);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1625);
   }
-  /* ./parser//parser.nit:1625 */
+  /* ./parser//parser.nit:1626 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[5]);
   fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:1627 */
+  /* ./parser//parser.nit:1628 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1627);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1628);
   }
-  /* ./parser//parser.nit:1629 */
+  /* ./parser//parser.nit:1630 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1629);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1630);
   }
-  /* ./parser//parser.nit:1630 */
+  /* ./parser//parser.nit:1631 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
   fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:1631 */
+  /* ./parser//parser.nit:1632 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7220,18 +7225,18 @@ void parser___ReduceAction22___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1632 */
+    /* ./parser//parser.nit:1633 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1634 */
+  /* ./parser//parser.nit:1635 */
   fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1639 */
-  fra.me.REG[2] = fra.me.REG[7];
   /* ./parser//parser.nit:1640 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1641 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction22____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1640);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1641);
   }
   REGB0 = ATTR_parser___ReduceAction22____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7247,7 +7252,7 @@ void parser___ReduceAction22___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos26]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1643;
+  fra.me.line = 1644;
   fra.me.meth = LOCATE_parser___ReduceAction22___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7255,7 +7260,7 @@ void parser___ReduceAction22___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1643 */
+  /* ./parser//parser.nit:1644 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction22____goto(fra.me.REG[1]) = REGB0;
@@ -7270,7 +7275,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 = 1647;
+  fra.me.line = 1648;
   fra.me.meth = LOCATE_parser___ReduceAction23___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -7285,51 +7290,51 @@ void parser___ReduceAction23___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1649 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1650 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1651 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1652 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1653 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1654 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1655 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1656 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1657 */
+  /* ./parser//parser.nit:1658 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1657);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1658);
   }
-  /* ./parser//parser.nit:1659 */
+  /* ./parser//parser.nit:1660 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1660);
   }
-  /* ./parser//parser.nit:1660 */
+  /* ./parser//parser.nit:1661 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
   fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:1662 */
+  /* ./parser//parser.nit:1663 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1662);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1663);
   }
-  /* ./parser//parser.nit:1664 */
+  /* ./parser//parser.nit:1665 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1664);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1665);
   }
-  /* ./parser//parser.nit:1665 */
+  /* ./parser//parser.nit:1666 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[4]);
   fra.me.REG[8] = fra.me.REG[4];
-  /* ./parser//parser.nit:1666 */
+  /* ./parser//parser.nit:1667 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7344,18 +7349,18 @@ void parser___ReduceAction23___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1667 */
+    /* ./parser//parser.nit:1668 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1669 */
+  /* ./parser//parser.nit:1670 */
   fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1674 */
-  fra.me.REG[2] = fra.me.REG[8];
   /* ./parser//parser.nit:1675 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* ./parser//parser.nit:1676 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction23____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1675);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1676);
   }
   REGB0 = ATTR_parser___ReduceAction23____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7371,7 +7376,7 @@ void parser___ReduceAction23___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos27]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1678;
+  fra.me.line = 1679;
   fra.me.meth = LOCATE_parser___ReduceAction23___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7379,7 +7384,7 @@ void parser___ReduceAction23___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1678 */
+  /* ./parser//parser.nit:1679 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction23____goto(fra.me.REG[1]) = REGB0;
@@ -7394,7 +7399,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 = 1682;
+  fra.me.line = 1683;
   fra.me.meth = LOCATE_parser___ReduceAction24___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -7408,36 +7413,36 @@ void parser___ReduceAction24___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1684 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1685 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1686 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1687 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1688 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:1689 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1690 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1691 */
+  /* ./parser//parser.nit:1692 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1691);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1692);
   }
-  /* ./parser//parser.nit:1692 */
+  /* ./parser//parser.nit:1693 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
   fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:1693 */
+  /* ./parser//parser.nit:1694 */
   fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* ./parser//parser.nit:1697 */
+  /* ./parser//parser.nit:1698 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1697);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1698);
   }
-  /* ./parser//parser.nit:1698 */
+  /* ./parser//parser.nit:1699 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7452,10 +7457,10 @@ void parser___ReduceAction24___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1699 */
+    /* ./parser//parser.nit:1700 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  /* ./parser//parser.nit:1701 */
+  /* ./parser//parser.nit:1702 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7470,18 +7475,18 @@ void parser___ReduceAction24___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1702 */
+    /* ./parser//parser.nit:1703 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1704 */
+  /* ./parser//parser.nit:1705 */
   fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1709 */
-  fra.me.REG[2] = fra.me.REG[6];
   /* ./parser//parser.nit:1710 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1711 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction24____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1710);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1711);
   }
   REGB0 = ATTR_parser___ReduceAction24____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7497,7 +7502,7 @@ void parser___ReduceAction24___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos28]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1713;
+  fra.me.line = 1714;
   fra.me.meth = LOCATE_parser___ReduceAction24___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7505,7 +7510,7 @@ void parser___ReduceAction24___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1713 */
+  /* ./parser//parser.nit:1714 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction24____goto(fra.me.REG[1]) = REGB0;
@@ -7520,7 +7525,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 = 1717;
+  fra.me.line = 1718;
   fra.me.meth = LOCATE_parser___ReduceAction25___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -7535,44 +7540,44 @@ void parser___ReduceAction25___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1719 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1720 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1721 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1722 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1723 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1724 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1725 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1726 */
+  /* ./parser//parser.nit:1727 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1726);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1727);
   }
-  /* ./parser//parser.nit:1727 */
+  /* ./parser//parser.nit:1728 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1729 */
+  /* ./parser//parser.nit:1730 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1729);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1730);
   }
-  /* ./parser//parser.nit:1730 */
+  /* ./parser//parser.nit:1731 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[4]);
   fra.me.REG[8] = fra.me.REG[4];
-  /* ./parser//parser.nit:1731 */
+  /* ./parser//parser.nit:1732 */
   fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* ./parser//parser.nit:1735 */
+  /* ./parser//parser.nit:1736 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1735);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1736);
   }
-  /* ./parser//parser.nit:1736 */
+  /* ./parser//parser.nit:1737 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7587,10 +7592,10 @@ void parser___ReduceAction25___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1737 */
+    /* ./parser//parser.nit:1738 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  /* ./parser//parser.nit:1739 */
+  /* ./parser//parser.nit:1740 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7605,18 +7610,18 @@ void parser___ReduceAction25___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1740 */
+    /* ./parser//parser.nit:1741 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1742 */
+  /* ./parser//parser.nit:1743 */
   fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1747 */
-  fra.me.REG[2] = fra.me.REG[7];
   /* ./parser//parser.nit:1748 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1749 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction25____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1748);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1749);
   }
   REGB0 = ATTR_parser___ReduceAction25____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7632,7 +7637,7 @@ void parser___ReduceAction25___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos29]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1751;
+  fra.me.line = 1752;
   fra.me.meth = LOCATE_parser___ReduceAction25___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7640,7 +7645,7 @@ void parser___ReduceAction25___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1751 */
+  /* ./parser//parser.nit:1752 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction25____goto(fra.me.REG[1]) = REGB0;
@@ -7655,7 +7660,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 = 1755;
+  fra.me.line = 1756;
   fra.me.meth = LOCATE_parser___ReduceAction26___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -7669,47 +7674,47 @@ void parser___ReduceAction26___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1757 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1758 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1759 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1760 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1761 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1762 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1763 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1764 */
+  /* ./parser//parser.nit:1765 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1764);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1765);
   }
-  /* ./parser//parser.nit:1765 */
+  /* ./parser//parser.nit:1766 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[5]);
   fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:1766 */
+  /* ./parser//parser.nit:1767 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1768 */
+  /* ./parser//parser.nit:1769 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1768);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1769);
   }
-  /* ./parser//parser.nit:1769 */
+  /* ./parser//parser.nit:1770 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:1770 */
+  /* ./parser//parser.nit:1771 */
   fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1774 */
+  /* ./parser//parser.nit:1775 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1774);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1775);
   }
-  /* ./parser//parser.nit:1775 */
+  /* ./parser//parser.nit:1776 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7724,10 +7729,10 @@ void parser___ReduceAction26___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1776 */
+    /* ./parser//parser.nit:1777 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1778 */
+  /* ./parser//parser.nit:1779 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7742,18 +7747,18 @@ void parser___ReduceAction26___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1779 */
+    /* ./parser//parser.nit:1780 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1781 */
+  /* ./parser//parser.nit:1782 */
   fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1786 */
-  fra.me.REG[2] = fra.me.REG[7];
   /* ./parser//parser.nit:1787 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1788 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction26____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1787);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1788);
   }
   REGB0 = ATTR_parser___ReduceAction26____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7769,7 +7774,7 @@ void parser___ReduceAction26___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos30]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1790;
+  fra.me.line = 1791;
   fra.me.meth = LOCATE_parser___ReduceAction26___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7777,7 +7782,7 @@ void parser___ReduceAction26___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1790 */
+  /* ./parser//parser.nit:1791 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction26____goto(fra.me.REG[1]) = REGB0;
@@ -7792,7 +7797,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 = 1794;
+  fra.me.line = 1795;
   fra.me.meth = LOCATE_parser___ReduceAction27___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -7807,55 +7812,55 @@ void parser___ReduceAction27___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1796 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1797 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1798 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1799 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1800 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1801 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1802 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1803 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1804 */
+  /* ./parser//parser.nit:1805 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1804);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1805);
   }
-  /* ./parser//parser.nit:1806 */
+  /* ./parser//parser.nit:1807 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1806);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1807);
   }
-  /* ./parser//parser.nit:1807 */
+  /* ./parser//parser.nit:1808 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
   fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:1808 */
+  /* ./parser//parser.nit:1809 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1810 */
+  /* ./parser//parser.nit:1811 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1810);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1811);
   }
-  /* ./parser//parser.nit:1811 */
+  /* ./parser//parser.nit:1812 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:1812 */
+  /* ./parser//parser.nit:1813 */
   fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1816 */
+  /* ./parser//parser.nit:1817 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1816);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1817);
   }
-  /* ./parser//parser.nit:1817 */
+  /* ./parser//parser.nit:1818 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7870,10 +7875,10 @@ void parser___ReduceAction27___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1818 */
+    /* ./parser//parser.nit:1819 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1820 */
+  /* ./parser//parser.nit:1821 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7888,18 +7893,18 @@ void parser___ReduceAction27___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1821 */
+    /* ./parser//parser.nit:1822 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1823 */
+  /* ./parser//parser.nit:1824 */
   fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1828 */
-  fra.me.REG[2] = fra.me.REG[8];
   /* ./parser//parser.nit:1829 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* ./parser//parser.nit:1830 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction27____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1829);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1830);
   }
   REGB0 = ATTR_parser___ReduceAction27____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7915,7 +7920,7 @@ void parser___ReduceAction27___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos31]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1832;
+  fra.me.line = 1833;
   fra.me.meth = LOCATE_parser___ReduceAction27___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7923,7 +7928,7 @@ void parser___ReduceAction27___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1832 */
+  /* ./parser//parser.nit:1833 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction27____goto(fra.me.REG[1]) = REGB0;
@@ -7938,7 +7943,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 = 1836;
+  fra.me.line = 1837;
   fra.me.meth = LOCATE_parser___ReduceAction28___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -7953,47 +7958,47 @@ void parser___ReduceAction28___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1838 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1839 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1840 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1841 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1842 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1843 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1844 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1845 */
+  /* ./parser//parser.nit:1846 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1845);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1846);
   }
-  /* ./parser//parser.nit:1846 */
+  /* ./parser//parser.nit:1847 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1848 */
+  /* ./parser//parser.nit:1849 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1848);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1849);
   }
-  /* ./parser//parser.nit:1849 */
+  /* ./parser//parser.nit:1850 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[4]);
   fra.me.REG[8] = fra.me.REG[4];
-  /* ./parser//parser.nit:1850 */
+  /* ./parser//parser.nit:1851 */
   fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* ./parser//parser.nit:1854 */
+  /* ./parser//parser.nit:1855 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1854);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1855);
   }
-  /* ./parser//parser.nit:1855 */
+  /* ./parser//parser.nit:1856 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
   fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:1856 */
+  /* ./parser//parser.nit:1857 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8008,10 +8013,10 @@ void parser___ReduceAction28___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1857 */
+    /* ./parser//parser.nit:1858 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  /* ./parser//parser.nit:1859 */
+  /* ./parser//parser.nit:1860 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8026,18 +8031,18 @@ void parser___ReduceAction28___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1860 */
+    /* ./parser//parser.nit:1861 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1862 */
+  /* ./parser//parser.nit:1863 */
   fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1867 */
-  fra.me.REG[2] = fra.me.REG[7];
   /* ./parser//parser.nit:1868 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1869 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction28____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1868);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1869);
   }
   REGB0 = ATTR_parser___ReduceAction28____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8053,7 +8058,7 @@ void parser___ReduceAction28___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos32]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1871;
+  fra.me.line = 1872;
   fra.me.meth = LOCATE_parser___ReduceAction28___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8061,7 +8066,7 @@ void parser___ReduceAction28___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1871 */
+  /* ./parser//parser.nit:1872 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction28____goto(fra.me.REG[1]) = REGB0;
@@ -8076,7 +8081,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 = 1875;
+  fra.me.line = 1876;
   fra.me.meth = LOCATE_parser___ReduceAction29___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -8092,55 +8097,55 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1877 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1878 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1879 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1880 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1881 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1882 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1883 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1884 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1885 */
+  /* ./parser//parser.nit:1886 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1885);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1886);
   }
-  /* ./parser//parser.nit:1887 */
+  /* ./parser//parser.nit:1888 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1887);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1888);
   }
-  /* ./parser//parser.nit:1888 */
+  /* ./parser//parser.nit:1889 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1890 */
+  /* ./parser//parser.nit:1891 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1890);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1891);
   }
-  /* ./parser//parser.nit:1891 */
+  /* ./parser//parser.nit:1892 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[4]);
   fra.me.REG[9] = fra.me.REG[4];
-  /* ./parser//parser.nit:1892 */
+  /* ./parser//parser.nit:1893 */
   fra.me.REG[9] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
-  /* ./parser//parser.nit:1896 */
+  /* ./parser//parser.nit:1897 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1896);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1897);
   }
-  /* ./parser//parser.nit:1897 */
+  /* ./parser//parser.nit:1898 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
   fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:1898 */
+  /* ./parser//parser.nit:1899 */
   REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8155,10 +8160,10 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1899 */
+    /* ./parser//parser.nit:1900 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
   }
-  /* ./parser//parser.nit:1901 */
+  /* ./parser//parser.nit:1902 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8173,18 +8178,18 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1902 */
+    /* ./parser//parser.nit:1903 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1904 */
+  /* ./parser//parser.nit:1905 */
   fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1909 */
-  fra.me.REG[2] = fra.me.REG[8];
   /* ./parser//parser.nit:1910 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* ./parser//parser.nit:1911 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction29____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1910);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1911);
   }
   REGB0 = ATTR_parser___ReduceAction29____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8200,7 +8205,7 @@ void parser___ReduceAction29___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos33]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1913;
+  fra.me.line = 1914;
   fra.me.meth = LOCATE_parser___ReduceAction29___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8208,7 +8213,7 @@ void parser___ReduceAction29___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1913 */
+  /* ./parser//parser.nit:1914 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction29____goto(fra.me.REG[1]) = REGB0;
@@ -8223,7 +8228,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 = 1917;
+  fra.me.line = 1918;
   fra.me.meth = LOCATE_parser___ReduceAction30___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -8238,58 +8243,58 @@ void parser___ReduceAction30___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1919 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1920 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1921 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1922 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1923 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1924 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1925 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1926 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1927 */
+  /* ./parser//parser.nit:1928 */
   REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1927);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1928);
   }
-  /* ./parser//parser.nit:1928 */
+  /* ./parser//parser.nit:1929 */
   fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[6]);
   fra.me.REG[7] = fra.me.REG[6];
-  /* ./parser//parser.nit:1930 */
+  /* ./parser//parser.nit:1931 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1930);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1931);
   }
-  /* ./parser//parser.nit:1931 */
+  /* ./parser//parser.nit:1932 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1933 */
+  /* ./parser//parser.nit:1934 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1933);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1934);
   }
-  /* ./parser//parser.nit:1934 */
+  /* ./parser//parser.nit:1935 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1935 */
+  /* ./parser//parser.nit:1936 */
   fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* ./parser//parser.nit:1939 */
+  /* ./parser//parser.nit:1940 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1939);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1940);
   }
-  /* ./parser//parser.nit:1940 */
+  /* ./parser//parser.nit:1941 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
   fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:1941 */
+  /* ./parser//parser.nit:1942 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8304,10 +8309,10 @@ void parser___ReduceAction30___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1942 */
+    /* ./parser//parser.nit:1943 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[6]);
   }
-  /* ./parser//parser.nit:1944 */
+  /* ./parser//parser.nit:1945 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8322,18 +8327,18 @@ void parser___ReduceAction30___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1945 */
+    /* ./parser//parser.nit:1946 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1947 */
+  /* ./parser//parser.nit:1948 */
   fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1952 */
-  fra.me.REG[2] = fra.me.REG[8];
   /* ./parser//parser.nit:1953 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* ./parser//parser.nit:1954 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction30____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1953);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1954);
   }
   REGB0 = ATTR_parser___ReduceAction30____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8349,7 +8354,7 @@ void parser___ReduceAction30___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos34]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1956;
+  fra.me.line = 1957;
   fra.me.meth = LOCATE_parser___ReduceAction30___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8357,7 +8362,7 @@ void parser___ReduceAction30___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:1956 */
+  /* ./parser//parser.nit:1957 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction30____goto(fra.me.REG[1]) = REGB0;
@@ -8372,7 +8377,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 = 1960;
+  fra.me.line = 1961;
   fra.me.meth = LOCATE_parser___ReduceAction31___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -8388,66 +8393,66 @@ void parser___ReduceAction31___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1962 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1963 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:1964 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1965 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1966 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1967 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1968 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:1969 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1970 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1971 */
+  /* ./parser//parser.nit:1972 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1971);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1972);
   }
-  /* ./parser//parser.nit:1973 */
+  /* ./parser//parser.nit:1974 */
   REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1973);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1974);
   }
-  /* ./parser//parser.nit:1974 */
+  /* ./parser//parser.nit:1975 */
   fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[6]);
   fra.me.REG[8] = fra.me.REG[6];
-  /* ./parser//parser.nit:1976 */
+  /* ./parser//parser.nit:1977 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1976);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1977);
   }
-  /* ./parser//parser.nit:1977 */
+  /* ./parser//parser.nit:1978 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1979 */
+  /* ./parser//parser.nit:1980 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1979);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1980);
   }
-  /* ./parser//parser.nit:1980 */
+  /* ./parser//parser.nit:1981 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1981 */
+  /* ./parser//parser.nit:1982 */
   fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* ./parser//parser.nit:1985 */
+  /* ./parser//parser.nit:1986 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1985);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1986);
   }
-  /* ./parser//parser.nit:1986 */
+  /* ./parser//parser.nit:1987 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[5]);
   fra.me.REG[9] = fra.me.REG[5];
-  /* ./parser//parser.nit:1987 */
+  /* ./parser//parser.nit:1988 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8462,10 +8467,10 @@ void parser___ReduceAction31___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1988 */
+    /* ./parser//parser.nit:1989 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[6]);
   }
-  /* ./parser//parser.nit:1990 */
+  /* ./parser//parser.nit:1991 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8480,18 +8485,18 @@ void parser___ReduceAction31___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1991 */
+    /* ./parser//parser.nit:1992 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1993 */
+  /* ./parser//parser.nit:1994 */
   fra.me.REG[9] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* ./parser//parser.nit:1998 */
-  fra.me.REG[2] = fra.me.REG[9];
   /* ./parser//parser.nit:1999 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* ./parser//parser.nit:2000 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction31____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1999);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2000);
   }
   REGB0 = ATTR_parser___ReduceAction31____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8507,7 +8512,7 @@ void parser___ReduceAction31___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos35]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2002;
+  fra.me.line = 2003;
   fra.me.meth = LOCATE_parser___ReduceAction31___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8515,7 +8520,7 @@ void parser___ReduceAction31___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2002 */
+  /* ./parser//parser.nit:2003 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction31____goto(fra.me.REG[1]) = REGB0;
@@ -8529,7 +8534,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 = 2006;
+  fra.me.line = 2007;
   fra.me.meth = LOCATE_parser___ReduceAction32___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -8541,45 +8546,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:2008 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2009 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2010 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2011 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2012 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2013 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2014 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2015 */
+  /* ./parser//parser.nit:2016 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2015);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2016);
   }
-  /* ./parser//parser.nit:2017 */
+  /* ./parser//parser.nit:2018 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmodule, ID_TKwmodule)) /*cast nullable TKwmodule*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2017);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2018);
   }
-  /* ./parser//parser.nit:2019 */
+  /* ./parser//parser.nit:2020 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2019);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2020);
   }
-  /* ./parser//parser.nit:2020 */
+  /* ./parser//parser.nit:2021 */
   fra.me.REG[3] = NEW_AModuledecl_parser_prod___AModuledecl___init_amoduledecl(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:2025 */
-  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:2026 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2027 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction32____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2026);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2027);
   }
   REGB0 = ATTR_parser___ReduceAction32____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8595,7 +8600,7 @@ void parser___ReduceAction32___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos36]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2029;
+  fra.me.line = 2030;
   fra.me.meth = LOCATE_parser___ReduceAction32___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8603,7 +8608,7 @@ void parser___ReduceAction32___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2029 */
+  /* ./parser//parser.nit:2030 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction32____goto(fra.me.REG[1]) = REGB0;
@@ -8617,7 +8622,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 = 2033;
+  fra.me.line = 2034;
   fra.me.meth = LOCATE_parser___ReduceAction33___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -8630,47 +8635,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:2035 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2036 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2037 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2038 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2039 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2040 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2041 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2042 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2043 */
+  /* ./parser//parser.nit:2044 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2043);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2044);
   }
-  /* ./parser//parser.nit:2045 */
+  /* ./parser//parser.nit:2046 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2045);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2046);
   }
-  /* ./parser//parser.nit:2047 */
+  /* ./parser//parser.nit:2048 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2047);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2048);
   }
-  /* ./parser//parser.nit:2048 */
+  /* ./parser//parser.nit:2049 */
   fra.me.REG[3] = NEW_AStdImport_parser_prod___AStdImport___init_astdimport(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:2053 */
-  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:2054 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2055 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction33____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, 2055);
   }
   REGB0 = ATTR_parser___ReduceAction33____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8686,7 +8691,7 @@ void parser___ReduceAction33___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos37]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2057;
+  fra.me.line = 2058;
   fra.me.meth = LOCATE_parser___ReduceAction33___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8694,7 +8699,7 @@ void parser___ReduceAction33___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2057 */
+  /* ./parser//parser.nit:2058 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction33____goto(fra.me.REG[1]) = REGB0;
@@ -8708,7 +8713,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 = 2061;
+  fra.me.line = 2062;
   fra.me.meth = LOCATE_parser___ReduceAction34___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -8721,47 +8726,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:2063 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2064 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2065 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2066 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2067 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2068 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2069 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2070 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2071 */
+  /* ./parser//parser.nit:2072 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2071);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2072);
   }
-  /* ./parser//parser.nit:2073 */
+  /* ./parser//parser.nit:2074 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2073);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2074);
   }
-  /* ./parser//parser.nit:2075 */
+  /* ./parser//parser.nit:2076 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwend, ID_TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2075);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2076);
   }
-  /* ./parser//parser.nit:2076 */
+  /* ./parser//parser.nit:2077 */
   fra.me.REG[3] = NEW_ANoImport_parser_prod___ANoImport___init_anoimport(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:2081 */
-  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:2082 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2083 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction34____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2082);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2083);
   }
   REGB0 = ATTR_parser___ReduceAction34____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8777,7 +8782,7 @@ void parser___ReduceAction34___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos38]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2085;
+  fra.me.line = 2086;
   fra.me.meth = LOCATE_parser___ReduceAction34___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8785,7 +8790,7 @@ void parser___ReduceAction34___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2085 */
+  /* ./parser//parser.nit:2086 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction34____goto(fra.me.REG[1]) = REGB0;
@@ -8800,7 +8805,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 = 2089;
+  fra.me.line = 2090;
   fra.me.meth = LOCATE_parser___ReduceAction35___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -8811,19 +8816,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:2091 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2092 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2093 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2094 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2095 */
+  /* ./parser//parser.nit:2096 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2095);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2096);
   }
-  /* ./parser//parser.nit:2096 */
+  /* ./parser//parser.nit:2097 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8838,18 +8843,18 @@ void parser___ReduceAction35___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2097 */
+    /* ./parser//parser.nit:2098 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:2099 */
+  /* ./parser//parser.nit:2100 */
   fra.me.REG[4] = NEW_AMainClassdef_parser_prod___AMainClassdef___init_amainclassdef(fra.me.REG[4]);
-  /* ./parser//parser.nit:2102 */
-  fra.me.REG[2] = fra.me.REG[4];
   /* ./parser//parser.nit:2103 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:2104 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction35____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2103);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2104);
   }
   REGB0 = ATTR_parser___ReduceAction35____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8865,7 +8870,7 @@ void parser___ReduceAction35___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos39]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2106;
+  fra.me.line = 2107;
   fra.me.meth = LOCATE_parser___ReduceAction35___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8873,7 +8878,7 @@ void parser___ReduceAction35___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2106 */
+  /* ./parser//parser.nit:2107 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction35____goto(fra.me.REG[1]) = REGB0;
@@ -8887,7 +8892,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 = 2110;
+  fra.me.line = 2111;
   fra.me.meth = LOCATE_parser___ReduceAction36___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -8897,17 +8902,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:2112 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2113 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2114 */
   fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2114 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2115 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2116 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction36____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2115);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2116);
   }
   REGB0 = ATTR_parser___ReduceAction36____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8923,7 +8928,7 @@ void parser___ReduceAction36___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos40]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2118;
+  fra.me.line = 2119;
   fra.me.meth = LOCATE_parser___ReduceAction36___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8931,7 +8936,7 @@ void parser___ReduceAction36___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2118 */
+  /* ./parser//parser.nit:2119 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction36____goto(fra.me.REG[1]) = REGB0;
@@ -8945,7 +8950,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 = 2122;
+  fra.me.line = 2123;
   fra.me.meth = LOCATE_parser___ReduceAction37___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -8956,27 +8961,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:2124 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2125 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2126 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2127 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2128 */
+  /* ./parser//parser.nit:2129 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2128);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2129);
   }
-  /* ./parser//parser.nit:2129 */
+  /* ./parser//parser.nit:2130 */
   fra.me.REG[3] = NEW_AMainMethPropdef_parser_prod___AMainMethPropdef___init_amainmethpropdef(NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:2133 */
-  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:2134 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2135 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction37____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2134);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2135);
   }
   REGB0 = ATTR_parser___ReduceAction37____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8992,7 +8997,7 @@ void parser___ReduceAction37___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos41]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2137;
+  fra.me.line = 2138;
   fra.me.meth = LOCATE_parser___ReduceAction37___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9000,7 +9005,7 @@ void parser___ReduceAction37___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2137 */
+  /* ./parser//parser.nit:2138 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction37____goto(fra.me.REG[1]) = REGB0;
@@ -9014,7 +9019,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 = 2141;
+  fra.me.line = 2142;
   fra.me.meth = LOCATE_parser___ReduceAction39___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -9030,61 +9035,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:2143 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2144 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2145 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2146 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2147 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2148 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2149 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2150 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2151 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2152 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
+  fra.me.REG[7] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2153 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2154 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2155 */
+  /* ./parser//parser.nit:2156 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2155);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2156);
   }
-  /* ./parser//parser.nit:2157 */
+  /* ./parser//parser.nit:2158 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2157);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2158);
   }
-  /* ./parser//parser.nit:2159 */
+  /* ./parser//parser.nit:2160 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2159);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2160);
   }
-  /* ./parser//parser.nit:2161 */
+  /* ./parser//parser.nit:2162 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2161);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2162);
   }
-  /* ./parser//parser.nit:2162 */
+  /* ./parser//parser.nit:2163 */
   fra.me.REG[9] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* ./parser//parser.nit:2172 */
-  fra.me.REG[2] = fra.me.REG[9];
   /* ./parser//parser.nit:2173 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* ./parser//parser.nit:2174 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction39____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2173);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2174);
   }
   REGB0 = ATTR_parser___ReduceAction39____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9100,7 +9105,7 @@ void parser___ReduceAction39___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos42]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2176;
+  fra.me.line = 2177;
   fra.me.meth = LOCATE_parser___ReduceAction39___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9108,7 +9113,7 @@ void parser___ReduceAction39___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2176 */
+  /* ./parser//parser.nit:2177 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction39____goto(fra.me.REG[1]) = REGB0;
@@ -9122,7 +9127,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 = 2180;
+  fra.me.line = 2181;
   fra.me.meth = LOCATE_parser___ReduceAction40___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -9139,69 +9144,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:2182 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2183 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2184 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2185 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2186 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2187 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2188 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2189 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2190 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2191 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2192 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
+  fra.me.REG[8] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2193 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2194 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2195 */
+  /* ./parser//parser.nit:2196 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2195);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2196);
   }
-  /* ./parser//parser.nit:2197 */
+  /* ./parser//parser.nit:2198 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2197);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2198);
   }
-  /* ./parser//parser.nit:2199 */
+  /* ./parser//parser.nit:2200 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2199);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2200);
   }
-  /* ./parser//parser.nit:2201 */
+  /* ./parser//parser.nit:2202 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2201);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2202);
   }
-  /* ./parser//parser.nit:2203 */
+  /* ./parser//parser.nit:2204 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2203);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2204);
   }
-  /* ./parser//parser.nit:2204 */
+  /* ./parser//parser.nit:2205 */
   fra.me.REG[10] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* ./parser//parser.nit:2214 */
-  fra.me.REG[2] = fra.me.REG[10];
   /* ./parser//parser.nit:2215 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* ./parser//parser.nit:2216 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction40____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2215);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2216);
   }
   REGB0 = ATTR_parser___ReduceAction40____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9217,7 +9222,7 @@ void parser___ReduceAction40___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos43]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2218;
+  fra.me.line = 2219;
   fra.me.meth = LOCATE_parser___ReduceAction40___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9225,7 +9230,7 @@ void parser___ReduceAction40___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2218 */
+  /* ./parser//parser.nit:2219 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction40____goto(fra.me.REG[1]) = REGB0;
@@ -9239,7 +9244,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 = 2222;
+  fra.me.line = 2223;
   fra.me.meth = LOCATE_parser___ReduceAction41___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -9256,72 +9261,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:2224 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2225 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2226 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2227 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2228 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2229 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2230 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2231 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2232 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2233 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2234 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
+  fra.me.REG[8] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2235 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2236 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2237 */
+  /* ./parser//parser.nit:2238 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2237);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2238);
   }
-  /* ./parser//parser.nit:2239 */
+  /* ./parser//parser.nit:2240 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2239);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2240);
   }
-  /* ./parser//parser.nit:2241 */
+  /* ./parser//parser.nit:2242 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2241);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2242);
   }
-  /* ./parser//parser.nit:2243 */
+  /* ./parser//parser.nit:2244 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2243);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2244);
   }
-  /* ./parser//parser.nit:2245 */
+  /* ./parser//parser.nit:2246 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2245);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2246);
   }
-  /* ./parser//parser.nit:2246 */
+  /* ./parser//parser.nit:2247 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[3]);
   fra.me.REG[8] = fra.me.REG[3];
-  /* ./parser//parser.nit:2247 */
+  /* ./parser//parser.nit:2248 */
   fra.me.REG[10] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* ./parser//parser.nit:2257 */
-  fra.me.REG[2] = fra.me.REG[10];
   /* ./parser//parser.nit:2258 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* ./parser//parser.nit:2259 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction41____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2258);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2259);
   }
   REGB0 = ATTR_parser___ReduceAction41____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9337,7 +9342,7 @@ void parser___ReduceAction41___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos44]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2261;
+  fra.me.line = 2262;
   fra.me.meth = LOCATE_parser___ReduceAction41___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9345,7 +9350,7 @@ void parser___ReduceAction41___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2261 */
+  /* ./parser//parser.nit:2262 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction41____goto(fra.me.REG[1]) = REGB0;
@@ -9359,7 +9364,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 = 2265;
+  fra.me.line = 2266;
   fra.me.meth = LOCATE_parser___ReduceAction42___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -9377,80 +9382,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:2267 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2268 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2269 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2270 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2271 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2272 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2273 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2274 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2275 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2276 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2277 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2278 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
+  fra.me.REG[9] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2279 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2280 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2281 */
+  /* ./parser//parser.nit:2282 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2281);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2282);
   }
-  /* ./parser//parser.nit:2283 */
+  /* ./parser//parser.nit:2284 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2283);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2284);
   }
-  /* ./parser//parser.nit:2285 */
+  /* ./parser//parser.nit:2286 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2285);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2286);
   }
-  /* ./parser//parser.nit:2287 */
+  /* ./parser//parser.nit:2288 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2287);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2288);
   }
-  /* ./parser//parser.nit:2289 */
+  /* ./parser//parser.nit:2290 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2289);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2290);
   }
-  /* ./parser//parser.nit:2291 */
+  /* ./parser//parser.nit:2292 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2291);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2292);
   }
-  /* ./parser//parser.nit:2292 */
+  /* ./parser//parser.nit:2293 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[3]);
   fra.me.REG[9] = fra.me.REG[3];
-  /* ./parser//parser.nit:2293 */
+  /* ./parser//parser.nit:2294 */
   fra.me.REG[11] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2303 */
-  fra.me.REG[2] = fra.me.REG[11];
   /* ./parser//parser.nit:2304 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* ./parser//parser.nit:2305 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction42____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2304);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2305);
   }
   REGB0 = ATTR_parser___ReduceAction42____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9466,7 +9471,7 @@ void parser___ReduceAction42___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos45]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2307;
+  fra.me.line = 2308;
   fra.me.meth = LOCATE_parser___ReduceAction42___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9474,7 +9479,7 @@ void parser___ReduceAction42___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2307 */
+  /* ./parser//parser.nit:2308 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction42____goto(fra.me.REG[1]) = REGB0;
@@ -9488,7 +9493,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 = 2311;
+  fra.me.line = 2312;
   fra.me.meth = LOCATE_parser___ReduceAction43___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -9505,72 +9510,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:2313 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2314 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2315 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2316 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2317 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2318 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2319 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2320 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2321 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2322 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2323 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
+  fra.me.REG[8] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2324 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2325 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2326 */
+  /* ./parser//parser.nit:2327 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2326);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2327);
   }
-  /* ./parser//parser.nit:2328 */
+  /* ./parser//parser.nit:2329 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2328);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2329);
   }
-  /* ./parser//parser.nit:2330 */
+  /* ./parser//parser.nit:2331 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2330);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2331);
   }
-  /* ./parser//parser.nit:2332 */
+  /* ./parser//parser.nit:2333 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2332);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2333);
   }
-  /* ./parser//parser.nit:2334 */
+  /* ./parser//parser.nit:2335 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2334);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2335);
   }
-  /* ./parser//parser.nit:2335 */
+  /* ./parser//parser.nit:2336 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[3]);
   fra.me.REG[9] = fra.me.REG[3];
-  /* ./parser//parser.nit:2336 */
+  /* ./parser//parser.nit:2337 */
   fra.me.REG[10] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* ./parser//parser.nit:2346 */
-  fra.me.REG[2] = fra.me.REG[10];
   /* ./parser//parser.nit:2347 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* ./parser//parser.nit:2348 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction43____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2347);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2348);
   }
   REGB0 = ATTR_parser___ReduceAction43____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9586,7 +9591,7 @@ void parser___ReduceAction43___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos46]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2350;
+  fra.me.line = 2351;
   fra.me.meth = LOCATE_parser___ReduceAction43___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9594,7 +9599,7 @@ void parser___ReduceAction43___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2350 */
+  /* ./parser//parser.nit:2351 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction43____goto(fra.me.REG[1]) = REGB0;
@@ -9608,7 +9613,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 = 2354;
+  fra.me.line = 2355;
   fra.me.meth = LOCATE_parser___ReduceAction44___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -9626,80 +9631,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:2356 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2357 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2358 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2359 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2360 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2361 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2362 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2363 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2364 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2365 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2366 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2367 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
+  fra.me.REG[9] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2368 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2369 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2370 */
+  /* ./parser//parser.nit:2371 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2370);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2371);
   }
-  /* ./parser//parser.nit:2372 */
+  /* ./parser//parser.nit:2373 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2372);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2373);
   }
-  /* ./parser//parser.nit:2374 */
+  /* ./parser//parser.nit:2375 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2374);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2375);
   }
-  /* ./parser//parser.nit:2376 */
+  /* ./parser//parser.nit:2377 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2376);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2377);
   }
-  /* ./parser//parser.nit:2378 */
+  /* ./parser//parser.nit:2379 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2378);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2379);
   }
-  /* ./parser//parser.nit:2380 */
+  /* ./parser//parser.nit:2381 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2380);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2381);
   }
-  /* ./parser//parser.nit:2381 */
+  /* ./parser//parser.nit:2382 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[3]);
   fra.me.REG[10] = fra.me.REG[3];
-  /* ./parser//parser.nit:2382 */
+  /* ./parser//parser.nit:2383 */
   fra.me.REG[11] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2392 */
-  fra.me.REG[2] = fra.me.REG[11];
   /* ./parser//parser.nit:2393 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* ./parser//parser.nit:2394 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction44____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2393);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2394);
   }
   REGB0 = ATTR_parser___ReduceAction44____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9715,7 +9720,7 @@ void parser___ReduceAction44___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos47]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2396;
+  fra.me.line = 2397;
   fra.me.meth = LOCATE_parser___ReduceAction44___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9723,7 +9728,7 @@ void parser___ReduceAction44___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2396 */
+  /* ./parser//parser.nit:2397 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction44____goto(fra.me.REG[1]) = REGB0;
@@ -9737,7 +9742,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 = 2400;
+  fra.me.line = 2401;
   fra.me.meth = LOCATE_parser___ReduceAction45___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -9755,83 +9760,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:2402 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2403 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2404 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2405 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2406 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2407 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2408 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2409 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2410 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2411 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2412 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2413 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
+  fra.me.REG[9] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2414 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2415 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2416 */
+  /* ./parser//parser.nit:2417 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2416);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2417);
   }
-  /* ./parser//parser.nit:2418 */
+  /* ./parser//parser.nit:2419 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2418);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2419);
   }
-  /* ./parser//parser.nit:2420 */
+  /* ./parser//parser.nit:2421 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2420);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2421);
   }
-  /* ./parser//parser.nit:2422 */
+  /* ./parser//parser.nit:2423 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2422);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2423);
   }
-  /* ./parser//parser.nit:2424 */
+  /* ./parser//parser.nit:2425 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2424);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2425);
   }
-  /* ./parser//parser.nit:2425 */
+  /* ./parser//parser.nit:2426 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[4]);
   fra.me.REG[9] = fra.me.REG[4];
-  /* ./parser//parser.nit:2427 */
+  /* ./parser//parser.nit:2428 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2427);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2428);
   }
-  /* ./parser//parser.nit:2428 */
+  /* ./parser//parser.nit:2429 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[3]);
   fra.me.REG[10] = fra.me.REG[3];
-  /* ./parser//parser.nit:2429 */
+  /* ./parser//parser.nit:2430 */
   fra.me.REG[11] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2439 */
-  fra.me.REG[2] = fra.me.REG[11];
   /* ./parser//parser.nit:2440 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* ./parser//parser.nit:2441 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction45____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2440);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2441);
   }
   REGB0 = ATTR_parser___ReduceAction45____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9847,7 +9852,7 @@ void parser___ReduceAction45___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos48]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2443;
+  fra.me.line = 2444;
   fra.me.meth = LOCATE_parser___ReduceAction45___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9855,7 +9860,7 @@ void parser___ReduceAction45___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2443 */
+  /* ./parser//parser.nit:2444 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction45____goto(fra.me.REG[1]) = REGB0;
@@ -9869,7 +9874,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 = 2447;
+  fra.me.line = 2448;
   fra.me.meth = LOCATE_parser___ReduceAction46___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -9888,91 +9893,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:2449 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2450 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2451 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2452 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2453 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2454 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2455 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2456 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2457 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2458 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2459 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2460 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2461 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
+  fra.me.REG[10] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2462 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2463 */
   fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2464 */
+  /* ./parser//parser.nit:2465 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2464);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2465);
   }
-  /* ./parser//parser.nit:2466 */
+  /* ./parser//parser.nit:2467 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2466);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2467);
   }
-  /* ./parser//parser.nit:2468 */
+  /* ./parser//parser.nit:2469 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2468);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2469);
   }
-  /* ./parser//parser.nit:2470 */
+  /* ./parser//parser.nit:2471 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2470);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2471);
   }
-  /* ./parser//parser.nit:2472 */
+  /* ./parser//parser.nit:2473 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2472);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2473);
   }
-  /* ./parser//parser.nit:2474 */
+  /* ./parser//parser.nit:2475 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2474);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2475);
   }
-  /* ./parser//parser.nit:2475 */
+  /* ./parser//parser.nit:2476 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[4]);
   fra.me.REG[10] = fra.me.REG[4];
-  /* ./parser//parser.nit:2477 */
+  /* ./parser//parser.nit:2478 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2477);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2478);
   }
-  /* ./parser//parser.nit:2478 */
+  /* ./parser//parser.nit:2479 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[3]);
   fra.me.REG[11] = fra.me.REG[3];
-  /* ./parser//parser.nit:2479 */
+  /* ./parser//parser.nit:2480 */
   fra.me.REG[12] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12]);
-  /* ./parser//parser.nit:2489 */
-  fra.me.REG[2] = fra.me.REG[12];
   /* ./parser//parser.nit:2490 */
+  fra.me.REG[2] = fra.me.REG[12];
+  /* ./parser//parser.nit:2491 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction46____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2490);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2491);
   }
   REGB0 = ATTR_parser___ReduceAction46____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9988,7 +9993,7 @@ void parser___ReduceAction46___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos49]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2493;
+  fra.me.line = 2494;
   fra.me.meth = LOCATE_parser___ReduceAction46___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9996,7 +10001,7 @@ void parser___ReduceAction46___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2493 */
+  /* ./parser//parser.nit:2494 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction46____goto(fra.me.REG[1]) = REGB0;
@@ -10010,7 +10015,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 = 2497;
+  fra.me.line = 2498;
   fra.me.meth = LOCATE_parser___ReduceAction47___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -10027,72 +10032,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:2499 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2500 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2501 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2502 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2503 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2504 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2505 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2506 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2507 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2508 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2509 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
+  fra.me.REG[8] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2510 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2511 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2512 */
+  /* ./parser//parser.nit:2513 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2512);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2513);
   }
-  /* ./parser//parser.nit:2514 */
+  /* ./parser//parser.nit:2515 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2514);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2515);
   }
-  /* ./parser//parser.nit:2516 */
+  /* ./parser//parser.nit:2517 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2516);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2517);
   }
-  /* ./parser//parser.nit:2518 */
+  /* ./parser//parser.nit:2519 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2518);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2519);
   }
-  /* ./parser//parser.nit:2520 */
+  /* ./parser//parser.nit:2521 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2520);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2521);
   }
-  /* ./parser//parser.nit:2521 */
+  /* ./parser//parser.nit:2522 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[3]);
   fra.me.REG[10] = fra.me.REG[3];
-  /* ./parser//parser.nit:2522 */
+  /* ./parser//parser.nit:2523 */
   fra.me.REG[10] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* ./parser//parser.nit:2532 */
-  fra.me.REG[2] = fra.me.REG[10];
   /* ./parser//parser.nit:2533 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* ./parser//parser.nit:2534 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction47____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2533);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2534);
   }
   REGB0 = ATTR_parser___ReduceAction47____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10108,7 +10113,7 @@ void parser___ReduceAction47___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos50]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2536;
+  fra.me.line = 2537;
   fra.me.meth = LOCATE_parser___ReduceAction47___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10116,7 +10121,7 @@ void parser___ReduceAction47___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2536 */
+  /* ./parser//parser.nit:2537 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction47____goto(fra.me.REG[1]) = REGB0;
@@ -10130,7 +10135,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 = 2540;
+  fra.me.line = 2541;
   fra.me.meth = LOCATE_parser___ReduceAction48___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -10148,80 +10153,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:2542 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2543 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2544 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2545 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2546 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2547 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2548 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2549 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2550 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2551 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2552 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2553 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
+  fra.me.REG[9] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2554 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2555 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2556 */
+  /* ./parser//parser.nit:2557 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2556);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2557);
   }
-  /* ./parser//parser.nit:2558 */
+  /* ./parser//parser.nit:2559 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2558);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2559);
   }
-  /* ./parser//parser.nit:2560 */
+  /* ./parser//parser.nit:2561 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2560);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2561);
   }
-  /* ./parser//parser.nit:2562 */
+  /* ./parser//parser.nit:2563 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2562);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2563);
   }
-  /* ./parser//parser.nit:2564 */
+  /* ./parser//parser.nit:2565 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2564);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2565);
   }
-  /* ./parser//parser.nit:2566 */
+  /* ./parser//parser.nit:2567 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2566);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2567);
   }
-  /* ./parser//parser.nit:2567 */
+  /* ./parser//parser.nit:2568 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[3]);
   fra.me.REG[11] = fra.me.REG[3];
-  /* ./parser//parser.nit:2568 */
+  /* ./parser//parser.nit:2569 */
   fra.me.REG[11] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2578 */
-  fra.me.REG[2] = fra.me.REG[11];
   /* ./parser//parser.nit:2579 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* ./parser//parser.nit:2580 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction48____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2579);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2580);
   }
   REGB0 = ATTR_parser___ReduceAction48____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10237,7 +10242,7 @@ void parser___ReduceAction48___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos51]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2582;
+  fra.me.line = 2583;
   fra.me.meth = LOCATE_parser___ReduceAction48___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10245,7 +10250,7 @@ void parser___ReduceAction48___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2582 */
+  /* ./parser//parser.nit:2583 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction48____goto(fra.me.REG[1]) = REGB0;
@@ -10259,7 +10264,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 = 2586;
+  fra.me.line = 2587;
   fra.me.meth = LOCATE_parser___ReduceAction49___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -10277,83 +10282,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:2588 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2589 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2590 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2591 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2592 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2593 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2594 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2595 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2596 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2597 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2598 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2599 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
+  fra.me.REG[9] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2600 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2601 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2602 */
+  /* ./parser//parser.nit:2603 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2602);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2603);
   }
-  /* ./parser//parser.nit:2604 */
+  /* ./parser//parser.nit:2605 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2604);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2605);
   }
-  /* ./parser//parser.nit:2606 */
+  /* ./parser//parser.nit:2607 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2606);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2607);
   }
-  /* ./parser//parser.nit:2608 */
+  /* ./parser//parser.nit:2609 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2608);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2609);
   }
-  /* ./parser//parser.nit:2610 */
+  /* ./parser//parser.nit:2611 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2610);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2611);
   }
-  /* ./parser//parser.nit:2611 */
+  /* ./parser//parser.nit:2612 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[4]);
   fra.me.REG[9] = fra.me.REG[4];
-  /* ./parser//parser.nit:2613 */
+  /* ./parser//parser.nit:2614 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2613);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2614);
   }
-  /* ./parser//parser.nit:2614 */
+  /* ./parser//parser.nit:2615 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[3]);
   fra.me.REG[11] = fra.me.REG[3];
-  /* ./parser//parser.nit:2615 */
+  /* ./parser//parser.nit:2616 */
   fra.me.REG[11] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2625 */
-  fra.me.REG[2] = fra.me.REG[11];
   /* ./parser//parser.nit:2626 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* ./parser//parser.nit:2627 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction49____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2626);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2627);
   }
   REGB0 = ATTR_parser___ReduceAction49____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10369,7 +10374,7 @@ void parser___ReduceAction49___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos52]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2629;
+  fra.me.line = 2630;
   fra.me.meth = LOCATE_parser___ReduceAction49___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10377,7 +10382,7 @@ void parser___ReduceAction49___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2629 */
+  /* ./parser//parser.nit:2630 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction49____goto(fra.me.REG[1]) = REGB0;
@@ -10391,7 +10396,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 = 2633;
+  fra.me.line = 2634;
   fra.me.meth = LOCATE_parser___ReduceAction50___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -10410,91 +10415,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:2635 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2636 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2637 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2638 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2639 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2640 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2641 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2642 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2643 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2644 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2645 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2646 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2647 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
+  fra.me.REG[10] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2648 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2649 */
   fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2650 */
+  /* ./parser//parser.nit:2651 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2650);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2651);
   }
-  /* ./parser//parser.nit:2652 */
+  /* ./parser//parser.nit:2653 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2652);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2653);
   }
-  /* ./parser//parser.nit:2654 */
+  /* ./parser//parser.nit:2655 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2654);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2655);
   }
-  /* ./parser//parser.nit:2656 */
+  /* ./parser//parser.nit:2657 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2656);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2657);
   }
-  /* ./parser//parser.nit:2658 */
+  /* ./parser//parser.nit:2659 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2658);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2659);
   }
-  /* ./parser//parser.nit:2660 */
+  /* ./parser//parser.nit:2661 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2660);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2661);
   }
-  /* ./parser//parser.nit:2661 */
+  /* ./parser//parser.nit:2662 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[4]);
   fra.me.REG[10] = fra.me.REG[4];
-  /* ./parser//parser.nit:2663 */
+  /* ./parser//parser.nit:2664 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2663);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2664);
   }
-  /* ./parser//parser.nit:2664 */
+  /* ./parser//parser.nit:2665 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[3]);
   fra.me.REG[12] = fra.me.REG[3];
-  /* ./parser//parser.nit:2665 */
+  /* ./parser//parser.nit:2666 */
   fra.me.REG[12] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12]);
-  /* ./parser//parser.nit:2675 */
-  fra.me.REG[2] = fra.me.REG[12];
   /* ./parser//parser.nit:2676 */
+  fra.me.REG[2] = fra.me.REG[12];
+  /* ./parser//parser.nit:2677 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction50____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2676);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2677);
   }
   REGB0 = ATTR_parser___ReduceAction50____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10510,7 +10515,7 @@ void parser___ReduceAction50___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos53]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2679;
+  fra.me.line = 2680;
   fra.me.meth = LOCATE_parser___ReduceAction50___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10518,7 +10523,7 @@ void parser___ReduceAction50___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2679 */
+  /* ./parser//parser.nit:2680 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction50____goto(fra.me.REG[1]) = REGB0;
@@ -10532,7 +10537,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 = 2683;
+  fra.me.line = 2684;
   fra.me.meth = LOCATE_parser___ReduceAction51___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -10550,83 +10555,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:2685 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2686 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2687 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2688 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2689 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2690 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2691 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2692 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2693 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2694 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2695 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2696 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
+  fra.me.REG[9] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2697 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2698 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2699 */
+  /* ./parser//parser.nit:2700 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2699);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2700);
   }
-  /* ./parser//parser.nit:2701 */
+  /* ./parser//parser.nit:2702 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2701);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2702);
   }
-  /* ./parser//parser.nit:2703 */
+  /* ./parser//parser.nit:2704 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2703);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2704);
   }
-  /* ./parser//parser.nit:2705 */
+  /* ./parser//parser.nit:2706 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2705);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2706);
   }
-  /* ./parser//parser.nit:2707 */
+  /* ./parser//parser.nit:2708 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2707);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2708);
   }
-  /* ./parser//parser.nit:2708 */
+  /* ./parser//parser.nit:2709 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[4]);
   fra.me.REG[10] = fra.me.REG[4];
-  /* ./parser//parser.nit:2710 */
+  /* ./parser//parser.nit:2711 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2710);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2711);
   }
-  /* ./parser//parser.nit:2711 */
+  /* ./parser//parser.nit:2712 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[3]);
   fra.me.REG[11] = fra.me.REG[3];
-  /* ./parser//parser.nit:2712 */
+  /* ./parser//parser.nit:2713 */
   fra.me.REG[11] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2722 */
-  fra.me.REG[2] = fra.me.REG[11];
   /* ./parser//parser.nit:2723 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* ./parser//parser.nit:2724 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction51____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2723);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2724);
   }
   REGB0 = ATTR_parser___ReduceAction51____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10642,7 +10647,7 @@ void parser___ReduceAction51___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos54]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2726;
+  fra.me.line = 2727;
   fra.me.meth = LOCATE_parser___ReduceAction51___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10650,7 +10655,7 @@ void parser___ReduceAction51___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2726 */
+  /* ./parser//parser.nit:2727 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction51____goto(fra.me.REG[1]) = REGB0;
@@ -10664,7 +10669,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 = 2730;
+  fra.me.line = 2731;
   fra.me.meth = LOCATE_parser___ReduceAction52___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -10683,91 +10688,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:2732 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2733 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2734 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2735 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2736 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2737 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2738 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2739 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2740 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2741 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2742 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2743 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2744 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
+  fra.me.REG[10] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2745 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2746 */
   fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2747 */
+  /* ./parser//parser.nit:2748 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2747);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2748);
   }
-  /* ./parser//parser.nit:2749 */
+  /* ./parser//parser.nit:2750 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2749);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2750);
   }
-  /* ./parser//parser.nit:2751 */
+  /* ./parser//parser.nit:2752 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2751);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2752);
   }
-  /* ./parser//parser.nit:2753 */
+  /* ./parser//parser.nit:2754 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2753);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2754);
   }
-  /* ./parser//parser.nit:2755 */
+  /* ./parser//parser.nit:2756 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2755);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2756);
   }
-  /* ./parser//parser.nit:2757 */
+  /* ./parser//parser.nit:2758 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2757);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2758);
   }
-  /* ./parser//parser.nit:2758 */
+  /* ./parser//parser.nit:2759 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[4]);
   fra.me.REG[11] = fra.me.REG[4];
-  /* ./parser//parser.nit:2760 */
+  /* ./parser//parser.nit:2761 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2760);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2761);
   }
-  /* ./parser//parser.nit:2761 */
+  /* ./parser//parser.nit:2762 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[3]);
   fra.me.REG[12] = fra.me.REG[3];
-  /* ./parser//parser.nit:2762 */
+  /* ./parser//parser.nit:2763 */
   fra.me.REG[12] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12]);
-  /* ./parser//parser.nit:2772 */
-  fra.me.REG[2] = fra.me.REG[12];
   /* ./parser//parser.nit:2773 */
+  fra.me.REG[2] = fra.me.REG[12];
+  /* ./parser//parser.nit:2774 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction52____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2773);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2774);
   }
   REGB0 = ATTR_parser___ReduceAction52____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10783,7 +10788,7 @@ void parser___ReduceAction52___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos55]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2776;
+  fra.me.line = 2777;
   fra.me.meth = LOCATE_parser___ReduceAction52___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10791,7 +10796,7 @@ void parser___ReduceAction52___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2776 */
+  /* ./parser//parser.nit:2777 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction52____goto(fra.me.REG[1]) = REGB0;
@@ -10805,7 +10810,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 = 2780;
+  fra.me.line = 2781;
   fra.me.meth = LOCATE_parser___ReduceAction53___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -10824,94 +10829,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:2782 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2783 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2784 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2785 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2786 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2787 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2788 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2789 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2790 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2791 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2792 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2793 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2794 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
+  fra.me.REG[10] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2795 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2796 */
   fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2797 */
+  /* ./parser//parser.nit:2798 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2797);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2798);
   }
-  /* ./parser//parser.nit:2799 */
+  /* ./parser//parser.nit:2800 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2799);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2800);
   }
-  /* ./parser//parser.nit:2801 */
+  /* ./parser//parser.nit:2802 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2801);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2802);
   }
-  /* ./parser//parser.nit:2803 */
+  /* ./parser//parser.nit:2804 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2803);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2804);
   }
-  /* ./parser//parser.nit:2805 */
+  /* ./parser//parser.nit:2806 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2805);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2806);
   }
-  /* ./parser//parser.nit:2806 */
+  /* ./parser//parser.nit:2807 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[5]);
   fra.me.REG[10] = fra.me.REG[5];
-  /* ./parser//parser.nit:2808 */
+  /* ./parser//parser.nit:2809 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2808);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2809);
   }
-  /* ./parser//parser.nit:2809 */
+  /* ./parser//parser.nit:2810 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[4]);
   fra.me.REG[11] = fra.me.REG[4];
-  /* ./parser//parser.nit:2811 */
+  /* ./parser//parser.nit:2812 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2811);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2812);
   }
-  /* ./parser//parser.nit:2812 */
+  /* ./parser//parser.nit:2813 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[3]);
   fra.me.REG[12] = fra.me.REG[3];
-  /* ./parser//parser.nit:2813 */
+  /* ./parser//parser.nit:2814 */
   fra.me.REG[12] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12]);
-  /* ./parser//parser.nit:2823 */
-  fra.me.REG[2] = fra.me.REG[12];
   /* ./parser//parser.nit:2824 */
+  fra.me.REG[2] = fra.me.REG[12];
+  /* ./parser//parser.nit:2825 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction53____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2824);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2825);
   }
   REGB0 = ATTR_parser___ReduceAction53____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10927,7 +10932,7 @@ void parser___ReduceAction53___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos56]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2827;
+  fra.me.line = 2828;
   fra.me.meth = LOCATE_parser___ReduceAction53___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10935,7 +10940,7 @@ void parser___ReduceAction53___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2827 */
+  /* ./parser//parser.nit:2828 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction53____goto(fra.me.REG[1]) = REGB0;
@@ -10949,7 +10954,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 = 2831;
+  fra.me.line = 2832;
   fra.me.meth = LOCATE_parser___ReduceAction54___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 14;
@@ -10969,102 +10974,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:2833 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2834 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2835 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2836 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2837 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2838 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2839 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2840 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2841 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2842 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2843 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2844 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2845 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2846 */
-  fra.me.REG[12] = NEW_Array_array___Array___init();
+  fra.me.REG[11] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2847 */
+  fra.me.REG[12] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2848 */
   fra.me.REG[13] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2849 */
+  /* ./parser//parser.nit:2850 */
   REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2849);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2850);
   }
-  /* ./parser//parser.nit:2851 */
+  /* ./parser//parser.nit:2852 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2851);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2852);
   }
-  /* ./parser//parser.nit:2853 */
+  /* ./parser//parser.nit:2854 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2853);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2854);
   }
-  /* ./parser//parser.nit:2855 */
+  /* ./parser//parser.nit:2856 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2855);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2856);
   }
-  /* ./parser//parser.nit:2857 */
+  /* ./parser//parser.nit:2858 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2857);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2858);
   }
-  /* ./parser//parser.nit:2859 */
+  /* ./parser//parser.nit:2860 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2859);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2860);
   }
-  /* ./parser//parser.nit:2860 */
+  /* ./parser//parser.nit:2861 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[5]);
   fra.me.REG[11] = fra.me.REG[5];
-  /* ./parser//parser.nit:2862 */
+  /* ./parser//parser.nit:2863 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2862);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2863);
   }
-  /* ./parser//parser.nit:2863 */
+  /* ./parser//parser.nit:2864 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[4]);
   fra.me.REG[12] = fra.me.REG[4];
-  /* ./parser//parser.nit:2865 */
+  /* ./parser//parser.nit:2866 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2865);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2866);
   }
-  /* ./parser//parser.nit:2866 */
+  /* ./parser//parser.nit:2867 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[3]);
   fra.me.REG[13] = fra.me.REG[3];
-  /* ./parser//parser.nit:2867 */
+  /* ./parser//parser.nit:2868 */
   fra.me.REG[13] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[12], fra.me.REG[13]);
-  /* ./parser//parser.nit:2877 */
-  fra.me.REG[2] = fra.me.REG[13];
   /* ./parser//parser.nit:2878 */
+  fra.me.REG[2] = fra.me.REG[13];
+  /* ./parser//parser.nit:2879 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction54____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2878);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2879);
   }
   REGB0 = ATTR_parser___ReduceAction54____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11080,7 +11085,7 @@ void parser___ReduceAction54___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos57]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2881;
+  fra.me.line = 2882;
   fra.me.meth = LOCATE_parser___ReduceAction54___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11088,7 +11093,7 @@ void parser___ReduceAction54___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2881 */
+  /* ./parser//parser.nit:2882 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction54____goto(fra.me.REG[1]) = REGB0;
@@ -11102,7 +11107,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 = 2885;
+  fra.me.line = 2886;
   fra.me.meth = LOCATE_parser___ReduceAction55___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11112,25 +11117,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:2887 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2888 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2889 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2890 */
+  /* ./parser//parser.nit:2891 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwclass, ID_TKwclass)) /*cast nullable TKwclass*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2890);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2891);
   }
-  /* ./parser//parser.nit:2891 */
+  /* ./parser//parser.nit:2892 */
   fra.me.REG[3] = NEW_AConcreteClasskind_parser_prod___AConcreteClasskind___init_aconcreteclasskind(fra.me.REG[3]);
-  /* ./parser//parser.nit:2894 */
-  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:2895 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2896 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction55____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2895);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2896);
   }
   REGB0 = ATTR_parser___ReduceAction55____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11146,7 +11151,7 @@ void parser___ReduceAction55___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos58]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2898;
+  fra.me.line = 2899;
   fra.me.meth = LOCATE_parser___ReduceAction55___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11154,7 +11159,7 @@ void parser___ReduceAction55___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2898 */
+  /* ./parser//parser.nit:2899 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction55____goto(fra.me.REG[1]) = REGB0;
@@ -11168,7 +11173,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 = 2902;
+  fra.me.line = 2903;
   fra.me.meth = LOCATE_parser___ReduceAction56___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -11179,33 +11184,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:2904 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2905 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2906 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2907 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2908 */
+  /* ./parser//parser.nit:2909 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwabstract, ID_TKwabstract)) /*cast nullable TKwabstract*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2908);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2909);
   }
-  /* ./parser//parser.nit:2910 */
+  /* ./parser//parser.nit:2911 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwclass, ID_TKwclass)) /*cast nullable TKwclass*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2910);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2911);
   }
-  /* ./parser//parser.nit:2911 */
+  /* ./parser//parser.nit:2912 */
   fra.me.REG[3] = NEW_AAbstractClasskind_parser_prod___AAbstractClasskind___init_aabstractclasskind(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:2915 */
-  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:2916 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2917 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction56____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2916);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2917);
   }
   REGB0 = ATTR_parser___ReduceAction56____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11221,7 +11226,7 @@ void parser___ReduceAction56___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos59]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2919;
+  fra.me.line = 2920;
   fra.me.meth = LOCATE_parser___ReduceAction56___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11229,7 +11234,7 @@ void parser___ReduceAction56___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2919 */
+  /* ./parser//parser.nit:2920 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction56____goto(fra.me.REG[1]) = REGB0;
@@ -11243,7 +11248,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 = 2923;
+  fra.me.line = 2924;
   fra.me.meth = LOCATE_parser___ReduceAction57___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11253,25 +11258,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:2925 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2926 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2927 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2928 */
+  /* ./parser//parser.nit:2929 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinterface, ID_TKwinterface)) /*cast nullable TKwinterface*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2928);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2929);
   }
-  /* ./parser//parser.nit:2929 */
+  /* ./parser//parser.nit:2930 */
   fra.me.REG[3] = NEW_AInterfaceClasskind_parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(fra.me.REG[3]);
-  /* ./parser//parser.nit:2932 */
-  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:2933 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2934 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction57____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2933);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2934);
   }
   REGB0 = ATTR_parser___ReduceAction57____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11287,7 +11292,7 @@ void parser___ReduceAction57___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos60]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2936;
+  fra.me.line = 2937;
   fra.me.meth = LOCATE_parser___ReduceAction57___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11295,7 +11300,7 @@ void parser___ReduceAction57___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2936 */
+  /* ./parser//parser.nit:2937 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction57____goto(fra.me.REG[1]) = REGB0;
@@ -11309,7 +11314,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 = 2940;
+  fra.me.line = 2941;
   fra.me.meth = LOCATE_parser___ReduceAction58___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11319,25 +11324,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:2942 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2943 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2944 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2945 */
+  /* ./parser//parser.nit:2946 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwenum, ID_TKwenum)) /*cast nullable TKwenum*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2945);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2946);
   }
-  /* ./parser//parser.nit:2946 */
+  /* ./parser//parser.nit:2947 */
   fra.me.REG[3] = NEW_AEnumClasskind_parser_prod___AEnumClasskind___init_aenumclasskind(fra.me.REG[3]);
-  /* ./parser//parser.nit:2949 */
-  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:2950 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2951 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction58____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2950);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2951);
   }
   REGB0 = ATTR_parser___ReduceAction58____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11353,7 +11358,7 @@ void parser___ReduceAction58___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos61]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2953;
+  fra.me.line = 2954;
   fra.me.meth = LOCATE_parser___ReduceAction58___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11361,7 +11366,7 @@ void parser___ReduceAction58___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2953 */
+  /* ./parser//parser.nit:2954 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction58____goto(fra.me.REG[1]) = REGB0;
@@ -11370,62 +11375,40 @@ void parser___ReduceAction58___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction59___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[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2957;
+  fra.me.line = 2958;
   fra.me.meth = LOCATE_parser___ReduceAction59___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:2959 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2960 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:2961 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2962 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:2963 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2964 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2965 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2967 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwextern, ID_TKwextern)) /*cast nullable TKwextern*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2963);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2968 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  /* ./parser//parser.nit:2970 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:2971 */
+  /* ./parser//parser.nit:2964 */
+  fra.me.REG[3] = NEW_AExternClasskind_parser_prod___AExternClasskind___init_aexternclasskind(fra.me.REG[3]);
+  /* ./parser//parser.nit:2967 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2968 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction59____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2971);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2968);
   }
   REGB0 = ATTR_parser___ReduceAction59____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11441,7 +11424,7 @@ void parser___ReduceAction59___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos62]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2974;
+  fra.me.line = 2971;
   fra.me.meth = LOCATE_parser___ReduceAction59___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11449,7 +11432,7 @@ void parser___ReduceAction59___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2974 */
+  /* ./parser//parser.nit:2971 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction59____goto(fra.me.REG[1]) = REGB0;
@@ -11458,74 +11441,62 @@ void parser___ReduceAction59___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction60___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[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 = 2978;
+  fra.me.line = 2975;
   fra.me.meth = LOCATE_parser___ReduceAction60___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:2980 */
+  /* ./parser//parser.nit:2977 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2981 */
+  /* ./parser//parser.nit:2978 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2982 */
+  /* ./parser//parser.nit:2979 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2983 */
+  /* ./parser//parser.nit:2980 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2984 */
+  /* ./parser//parser.nit:2981 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2982 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2983 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:2985 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2986 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2987 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2990 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2990);
-  }
-  /* ./parser//parser.nit:2991 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2992 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* ./parser//parser.nit:2986 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:2994 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:2995 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:2996 */
+  /* ./parser//parser.nit:2988 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:2989 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction60____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2996);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2989);
   }
   REGB0 = ATTR_parser___ReduceAction60____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11541,7 +11512,7 @@ void parser___ReduceAction60___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos63]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2999;
+  fra.me.line = 2992;
   fra.me.meth = LOCATE_parser___ReduceAction60___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11549,7 +11520,7 @@ void parser___ReduceAction60___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:2999 */
+  /* ./parser//parser.nit:2992 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction60____goto(fra.me.REG[1]) = REGB0;
@@ -11558,37 +11529,74 @@ void parser___ReduceAction60___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction61___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[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 = 3003;
+  fra.me.line = 2996;
   fra.me.meth = LOCATE_parser___ReduceAction61___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:3005 */
+  /* ./parser//parser.nit:2998 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3006 */
+  /* ./parser//parser.nit:2999 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3000 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3007 */
+  /* ./parser//parser.nit:3001 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3002 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3003 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3004 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3005 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:3008 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3010 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3011 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3008);
+  }
+  /* ./parser//parser.nit:3009 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:3010 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
+  /* ./parser//parser.nit:3012 */
+  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:3013 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:3014 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction61____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3011);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3014);
   }
   REGB0 = ATTR_parser___ReduceAction61____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11604,7 +11612,7 @@ void parser___ReduceAction61___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos64]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3014;
+  fra.me.line = 3017;
   fra.me.meth = LOCATE_parser___ReduceAction61___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11612,7 +11620,7 @@ void parser___ReduceAction61___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3014 */
+  /* ./parser//parser.nit:3017 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction61____goto(fra.me.REG[1]) = REGB0;
@@ -11621,33 +11629,30 @@ void parser___ReduceAction61___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction62___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[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 = 3018;
+  fra.me.line = 3021;
   fra.me.meth = LOCATE_parser___ReduceAction62___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3020 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3021 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3023 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3023);
-  }
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:3024 */
-  fra.me.REG[3] = NEW_AFormaldef_parser_prod___AFormaldef___init_aformaldef(fra.me.REG[3], NIT_NULL);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3025 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3026 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3028 */
   fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:3029 */
@@ -11687,7 +11692,7 @@ void parser___ReduceAction62___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction63___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[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -11695,41 +11700,32 @@ void parser___ReduceAction63___action(val_t p0, val_t p1){
   fra.me.line = 3036;
   fra.me.meth = LOCATE_parser___ReduceAction63___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:3038 */
   fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:3039 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3040 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3042 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3042);
-  }
-  /* ./parser//parser.nit:3044 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:3041 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3044);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3041);
   }
-  /* ./parser//parser.nit:3045 */
-  fra.me.REG[3] = NEW_AFormaldef_parser_prod___AFormaldef___init_aformaldef(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3049 */
+  /* ./parser//parser.nit:3042 */
+  fra.me.REG[3] = NEW_AFormaldef_parser_prod___AFormaldef___init_aformaldef(fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:3046 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3050 */
+  /* ./parser//parser.nit:3047 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction63____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3050);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3047);
   }
   REGB0 = ATTR_parser___ReduceAction63____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11745,7 +11741,7 @@ void parser___ReduceAction63___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos66]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3053;
+  fra.me.line = 3050;
   fra.me.meth = LOCATE_parser___ReduceAction63___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11753,7 +11749,7 @@ void parser___ReduceAction63___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3053 */
+  /* ./parser//parser.nit:3050 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction63____goto(fra.me.REG[1]) = REGB0;
@@ -11762,54 +11758,49 @@ void parser___ReduceAction63___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction64___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[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 = 3057;
+  fra.me.line = 3054;
   fra.me.meth = LOCATE_parser___ReduceAction64___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:3059 */
+  /* ./parser//parser.nit:3056 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3060 */
+  /* ./parser//parser.nit:3057 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3061 */
+  /* ./parser//parser.nit:3058 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3062 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3063 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3065 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwspecial, ID_TKwspecial)) /*cast nullable TKwspecial*/;
+  /* ./parser//parser.nit:3060 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3065);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3060);
   }
-  /* ./parser//parser.nit:3067 */
+  /* ./parser//parser.nit:3062 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3067);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3062);
   }
-  /* ./parser//parser.nit:3068 */
-  fra.me.REG[3] = NEW_ASuperclass_parser_prod___ASuperclass___init_asuperclass(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:3073 */
+  /* ./parser//parser.nit:3063 */
+  fra.me.REG[3] = NEW_AFormaldef_parser_prod___AFormaldef___init_aformaldef(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3067 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3074 */
+  /* ./parser//parser.nit:3068 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction64____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3074);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3068);
   }
   REGB0 = ATTR_parser___ReduceAction64____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11825,7 +11816,7 @@ void parser___ReduceAction64___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos67]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3077;
+  fra.me.line = 3071;
   fra.me.meth = LOCATE_parser___ReduceAction64___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11833,7 +11824,7 @@ void parser___ReduceAction64___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3077 */
+  /* ./parser//parser.nit:3071 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction64____goto(fra.me.REG[1]) = REGB0;
@@ -11847,7 +11838,7 @@ void parser___ReduceAction65___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 = 3081;
+  fra.me.line = 3075;
   fra.me.meth = LOCATE_parser___ReduceAction65___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -11859,37 +11850,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:3083 */
+  /* ./parser//parser.nit:3077 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3084 */
+  /* ./parser//parser.nit:3078 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3085 */
+  /* ./parser//parser.nit:3079 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3086 */
+  /* ./parser//parser.nit:3080 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3087 */
+  /* ./parser//parser.nit:3081 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3089 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
+  /* ./parser//parser.nit:3083 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwspecial, ID_TKwspecial)) /*cast nullable TKwspecial*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3089);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3083);
   }
-  /* ./parser//parser.nit:3091 */
+  /* ./parser//parser.nit:3085 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3091);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3085);
   }
-  /* ./parser//parser.nit:3092 */
-  fra.me.REG[3] = NEW_ASuperclass_parser_prod___ASuperclass___init_asuperclass(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3097 */
+  /* ./parser//parser.nit:3086 */
+  fra.me.REG[3] = NEW_ASuperclass_parser_prod___ASuperclass___init_asuperclass(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:3091 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3098 */
+  /* ./parser//parser.nit:3092 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction65____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3098);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3092);
   }
   REGB0 = ATTR_parser___ReduceAction65____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11905,7 +11896,7 @@ void parser___ReduceAction65___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos68]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3101;
+  fra.me.line = 3095;
   fra.me.meth = LOCATE_parser___ReduceAction65___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11913,7 +11904,7 @@ void parser___ReduceAction65___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3101 */
+  /* ./parser//parser.nit:3095 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction65____goto(fra.me.REG[1]) = REGB0;
@@ -11922,34 +11913,54 @@ void parser___ReduceAction65___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction66___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[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 = 3105;
+  fra.me.line = 3099;
   fra.me.meth = LOCATE_parser___ReduceAction66___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:3107 */
+  /* ./parser//parser.nit:3101 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3108 */
+  /* ./parser//parser.nit:3102 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3103 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3104 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3105 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3107 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3107);
+  }
   /* ./parser//parser.nit:3109 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3111 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3109);
+  }
+  /* ./parser//parser.nit:3110 */
+  fra.me.REG[3] = NEW_ASuperclass_parser_prod___ASuperclass___init_asuperclass(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3115 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3112 */
+  /* ./parser//parser.nit:3116 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction66____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3112);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3116);
   }
   REGB0 = ATTR_parser___ReduceAction66____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11965,7 +11976,7 @@ void parser___ReduceAction66___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos69]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3115;
+  fra.me.line = 3119;
   fra.me.meth = LOCATE_parser___ReduceAction66___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11973,7 +11984,7 @@ void parser___ReduceAction66___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3115 */
+  /* ./parser//parser.nit:3119 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction66____goto(fra.me.REG[1]) = REGB0;
@@ -11982,87 +11993,34 @@ void parser___ReduceAction66___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction67___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[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 = 3119;
+  fra.me.line = 3123;
   fra.me.meth = LOCATE_parser___ReduceAction67___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3121 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3122 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3123 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3124 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3125 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:3126 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3127 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3128 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3130 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3130);
-  }
-  /* ./parser//parser.nit:3132 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3132);
-  }
-  /* ./parser//parser.nit:3134 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3134);
-  }
-  /* ./parser//parser.nit:3136 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3136);
-  }
-  /* ./parser//parser.nit:3138 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3138);
-  }
-  /* ./parser//parser.nit:3140 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3140);
-  }
-  /* ./parser//parser.nit:3141 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3150 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3129 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3151 */
+  /* ./parser//parser.nit:3130 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction67____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3151);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3130);
   }
   REGB0 = ATTR_parser___ReduceAction67____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12078,7 +12036,7 @@ void parser___ReduceAction67___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos70]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3154;
+  fra.me.line = 3133;
   fra.me.meth = LOCATE_parser___ReduceAction67___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12086,7 +12044,7 @@ void parser___ReduceAction67___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3154 */
+  /* ./parser//parser.nit:3133 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction67____goto(fra.me.REG[1]) = REGB0;
@@ -12095,15 +12053,15 @@ void parser___ReduceAction67___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction68___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 = 3158;
+  fra.me.line = 3137;
   fra.me.meth = LOCATE_parser___ReduceAction68___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;
@@ -12113,78 +12071,69 @@ void parser___ReduceAction68___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:3160 */
+  /* ./parser//parser.nit:3139 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3161 */
+  /* ./parser//parser.nit:3140 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3162 */
+  /* ./parser//parser.nit:3141 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3163 */
+  /* ./parser//parser.nit:3142 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3164 */
+  /* ./parser//parser.nit:3143 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3165 */
+  /* ./parser//parser.nit:3144 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3166 */
+  /* ./parser//parser.nit:3145 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3167 */
+  /* ./parser//parser.nit:3146 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3168 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3170 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3170);
-  }
-  /* ./parser//parser.nit:3172 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3148 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3172);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3148);
   }
-  /* ./parser//parser.nit:3174 */
+  /* ./parser//parser.nit:3150 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3174);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3150);
   }
-  /* ./parser//parser.nit:3176 */
+  /* ./parser//parser.nit:3152 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3176);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3152);
   }
-  /* ./parser//parser.nit:3178 */
+  /* ./parser//parser.nit:3154 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3178);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3154);
   }
-  /* ./parser//parser.nit:3180 */
+  /* ./parser//parser.nit:3156 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3180);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3156);
   }
-  /* ./parser//parser.nit:3182 */
+  /* ./parser//parser.nit:3158 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3182);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3158);
   }
-  /* ./parser//parser.nit:3183 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3192 */
+  /* ./parser//parser.nit:3159 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3168 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3193 */
+  /* ./parser//parser.nit:3169 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction68____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3193);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3169);
   }
   REGB0 = ATTR_parser___ReduceAction68____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12200,7 +12149,7 @@ void parser___ReduceAction68___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos71]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3196;
+  fra.me.line = 3172;
   fra.me.meth = LOCATE_parser___ReduceAction68___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12208,7 +12157,7 @@ void parser___ReduceAction68___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3196 */
+  /* ./parser//parser.nit:3172 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction68____goto(fra.me.REG[1]) = REGB0;
@@ -12217,15 +12166,15 @@ void parser___ReduceAction68___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction69___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 = 3200;
+  fra.me.line = 3176;
   fra.me.meth = LOCATE_parser___ReduceAction69___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;
@@ -12235,71 +12184,78 @@ void parser___ReduceAction69___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:3202 */
+  /* ./parser//parser.nit:3178 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3203 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3204 */
+  /* ./parser//parser.nit:3179 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3205 */
+  /* ./parser//parser.nit:3180 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3206 */
+  /* ./parser//parser.nit:3181 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3207 */
+  /* ./parser//parser.nit:3182 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3208 */
+  /* ./parser//parser.nit:3183 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3209 */
+  /* ./parser//parser.nit:3184 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3210 */
+  /* ./parser//parser.nit:3185 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3212 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:3186 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3188 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3212);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3188);
   }
-  /* ./parser//parser.nit:3214 */
+  /* ./parser//parser.nit:3190 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3190);
+  }
+  /* ./parser//parser.nit:3192 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3214);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3192);
   }
-  /* ./parser//parser.nit:3216 */
+  /* ./parser//parser.nit:3194 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3216);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3194);
   }
-  /* ./parser//parser.nit:3218 */
+  /* ./parser//parser.nit:3196 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3218);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3196);
   }
-  /* ./parser//parser.nit:3220 */
+  /* ./parser//parser.nit:3198 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3220);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3198);
   }
-  /* ./parser//parser.nit:3222 */
+  /* ./parser//parser.nit:3200 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3222);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3200);
   }
-  /* ./parser//parser.nit:3223 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3232 */
+  /* ./parser//parser.nit:3201 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3210 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3233 */
+  /* ./parser//parser.nit:3211 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction69____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3233);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3211);
   }
   REGB0 = ATTR_parser___ReduceAction69____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12315,7 +12271,7 @@ void parser___ReduceAction69___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos72]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3236;
+  fra.me.line = 3214;
   fra.me.meth = LOCATE_parser___ReduceAction69___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12323,7 +12279,7 @@ void parser___ReduceAction69___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3236 */
+  /* ./parser//parser.nit:3214 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction69____goto(fra.me.REG[1]) = REGB0;
@@ -12332,15 +12288,15 @@ void parser___ReduceAction69___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction70___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 = 3240;
+  fra.me.line = 3218;
   fra.me.meth = LOCATE_parser___ReduceAction70___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;
@@ -12350,80 +12306,71 @@ void parser___ReduceAction70___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:3242 */
+  /* ./parser//parser.nit:3220 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3243 */
+  /* ./parser//parser.nit:3221 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3244 */
+  /* ./parser//parser.nit:3222 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3245 */
+  /* ./parser//parser.nit:3223 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3246 */
+  /* ./parser//parser.nit:3224 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3247 */
+  /* ./parser//parser.nit:3225 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3248 */
+  /* ./parser//parser.nit:3226 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3249 */
+  /* ./parser//parser.nit:3227 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3250 */
+  /* ./parser//parser.nit:3228 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3251 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3253 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3253);
-  }
-  /* ./parser//parser.nit:3255 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3230 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3255);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3230);
   }
-  /* ./parser//parser.nit:3257 */
+  /* ./parser//parser.nit:3232 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3257);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3232);
   }
-  /* ./parser//parser.nit:3259 */
+  /* ./parser//parser.nit:3234 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3259);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3234);
   }
-  /* ./parser//parser.nit:3261 */
+  /* ./parser//parser.nit:3236 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3261);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3236);
   }
-  /* ./parser//parser.nit:3263 */
+  /* ./parser//parser.nit:3238 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3263);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3238);
   }
-  /* ./parser//parser.nit:3265 */
+  /* ./parser//parser.nit:3240 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3265);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3240);
   }
-  /* ./parser//parser.nit:3266 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3275 */
+  /* ./parser//parser.nit:3241 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3250 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3276 */
+  /* ./parser//parser.nit:3251 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction70____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3276);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3251);
   }
   REGB0 = ATTR_parser___ReduceAction70____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12439,7 +12386,7 @@ void parser___ReduceAction70___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos73]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3279;
+  fra.me.line = 3254;
   fra.me.meth = LOCATE_parser___ReduceAction70___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12447,7 +12394,7 @@ void parser___ReduceAction70___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3279 */
+  /* ./parser//parser.nit:3254 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction70____goto(fra.me.REG[1]) = REGB0;
@@ -12456,15 +12403,15 @@ void parser___ReduceAction70___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction71___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 = 3283;
+  fra.me.line = 3258;
   fra.me.meth = LOCATE_parser___ReduceAction71___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;
@@ -12474,71 +12421,80 @@ void parser___ReduceAction71___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:3285 */
+  /* ./parser//parser.nit:3260 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3286 */
+  /* ./parser//parser.nit:3261 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3287 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3288 */
+  /* ./parser//parser.nit:3262 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3263 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3289 */
+  /* ./parser//parser.nit:3264 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3290 */
+  /* ./parser//parser.nit:3265 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3291 */
+  /* ./parser//parser.nit:3266 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3292 */
+  /* ./parser//parser.nit:3267 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3293 */
+  /* ./parser//parser.nit:3268 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3295 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:3269 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3271 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3295);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3271);
   }
-  /* ./parser//parser.nit:3297 */
+  /* ./parser//parser.nit:3273 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3273);
+  }
+  /* ./parser//parser.nit:3275 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3297);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3275);
   }
-  /* ./parser//parser.nit:3299 */
+  /* ./parser//parser.nit:3277 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3299);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3277);
   }
-  /* ./parser//parser.nit:3301 */
+  /* ./parser//parser.nit:3279 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3301);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3279);
   }
-  /* ./parser//parser.nit:3303 */
+  /* ./parser//parser.nit:3281 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3303);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3281);
   }
-  /* ./parser//parser.nit:3305 */
+  /* ./parser//parser.nit:3283 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3305);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3283);
   }
-  /* ./parser//parser.nit:3306 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3315 */
+  /* ./parser//parser.nit:3284 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3293 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3316 */
+  /* ./parser//parser.nit:3294 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction71____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, 3294);
   }
   REGB0 = ATTR_parser___ReduceAction71____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12554,7 +12510,7 @@ void parser___ReduceAction71___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos74]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3319;
+  fra.me.line = 3297;
   fra.me.meth = LOCATE_parser___ReduceAction71___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12562,7 +12518,7 @@ void parser___ReduceAction71___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3319 */
+  /* ./parser//parser.nit:3297 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction71____goto(fra.me.REG[1]) = REGB0;
@@ -12571,15 +12527,15 @@ void parser___ReduceAction71___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction72___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 = 3323;
+  fra.me.line = 3301;
   fra.me.meth = LOCATE_parser___ReduceAction72___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;
@@ -12589,80 +12545,71 @@ void parser___ReduceAction72___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:3325 */
+  /* ./parser//parser.nit:3303 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3326 */
+  /* ./parser//parser.nit:3304 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3327 */
+  /* ./parser//parser.nit:3305 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3328 */
+  /* ./parser//parser.nit:3306 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3329 */
+  /* ./parser//parser.nit:3307 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3330 */
+  /* ./parser//parser.nit:3308 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3331 */
+  /* ./parser//parser.nit:3309 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3332 */
+  /* ./parser//parser.nit:3310 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3333 */
+  /* ./parser//parser.nit:3311 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3334 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3336 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3336);
-  }
-  /* ./parser//parser.nit:3338 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3313 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3338);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3313);
   }
-  /* ./parser//parser.nit:3340 */
+  /* ./parser//parser.nit:3315 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3340);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3315);
   }
-  /* ./parser//parser.nit:3342 */
+  /* ./parser//parser.nit:3317 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3342);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3317);
   }
-  /* ./parser//parser.nit:3344 */
+  /* ./parser//parser.nit:3319 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3344);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3319);
   }
-  /* ./parser//parser.nit:3346 */
+  /* ./parser//parser.nit:3321 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3346);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3321);
   }
-  /* ./parser//parser.nit:3348 */
+  /* ./parser//parser.nit:3323 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3348);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3323);
   }
-  /* ./parser//parser.nit:3349 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3358 */
+  /* ./parser//parser.nit:3324 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3333 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3359 */
+  /* ./parser//parser.nit:3334 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction72____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3359);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3334);
   }
   REGB0 = ATTR_parser___ReduceAction72____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12678,7 +12625,7 @@ void parser___ReduceAction72___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos75]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3362;
+  fra.me.line = 3337;
   fra.me.meth = LOCATE_parser___ReduceAction72___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12686,7 +12633,7 @@ void parser___ReduceAction72___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3362 */
+  /* ./parser//parser.nit:3337 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction72____goto(fra.me.REG[1]) = REGB0;
@@ -12695,15 +12642,15 @@ void parser___ReduceAction72___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction73___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 = 3366;
+  fra.me.line = 3341;
   fra.me.meth = LOCATE_parser___ReduceAction73___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;
@@ -12712,63 +12659,81 @@ void parser___ReduceAction73___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:3368 */
+  /* ./parser//parser.nit:3343 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3369 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3370 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3371 */
+  /* ./parser//parser.nit:3344 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3372 */
+  /* ./parser//parser.nit:3345 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3346 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3347 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3373 */
+  /* ./parser//parser.nit:3348 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3374 */
+  /* ./parser//parser.nit:3349 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3375 */
+  /* ./parser//parser.nit:3350 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3377 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:3351 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3352 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3354 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3377);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3354);
   }
-  /* ./parser//parser.nit:3379 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:3356 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3379);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3356);
   }
-  /* ./parser//parser.nit:3381 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* ./parser//parser.nit:3358 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3381);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3358);
   }
-  /* ./parser//parser.nit:3383 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* ./parser//parser.nit:3360 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3383);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3360);
   }
-  /* ./parser//parser.nit:3385 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:3362 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3385);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3362);
   }
-  /* ./parser//parser.nit:3386 */
-  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3394 */
+  /* ./parser//parser.nit:3364 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3364);
+  }
+  /* ./parser//parser.nit:3366 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3366);
+  }
+  /* ./parser//parser.nit:3367 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3376 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3395 */
+  /* ./parser//parser.nit:3377 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction73____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3395);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3377);
   }
   REGB0 = ATTR_parser___ReduceAction73____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12784,7 +12749,7 @@ void parser___ReduceAction73___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos76]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3398;
+  fra.me.line = 3380;
   fra.me.meth = LOCATE_parser___ReduceAction73___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12792,7 +12757,7 @@ void parser___ReduceAction73___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3398 */
+  /* ./parser//parser.nit:3380 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction73____goto(fra.me.REG[1]) = REGB0;
@@ -12801,15 +12766,15 @@ void parser___ReduceAction73___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction74___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 = 3402;
+  fra.me.line = 3384;
   fra.me.meth = LOCATE_parser___ReduceAction74___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;
@@ -12818,72 +12783,63 @@ void parser___ReduceAction74___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:3404 */
+  /* ./parser//parser.nit:3386 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3405 */
+  /* ./parser//parser.nit:3387 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3406 */
+  /* ./parser//parser.nit:3388 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3407 */
+  /* ./parser//parser.nit:3389 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3408 */
+  /* ./parser//parser.nit:3390 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3409 */
+  /* ./parser//parser.nit:3391 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3410 */
+  /* ./parser//parser.nit:3392 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3411 */
+  /* ./parser//parser.nit:3393 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3412 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3414 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3414);
-  }
-  /* ./parser//parser.nit:3416 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3395 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3416);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3395);
   }
-  /* ./parser//parser.nit:3418 */
+  /* ./parser//parser.nit:3397 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3418);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3397);
   }
-  /* ./parser//parser.nit:3420 */
+  /* ./parser//parser.nit:3399 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3420);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3399);
   }
-  /* ./parser//parser.nit:3422 */
+  /* ./parser//parser.nit:3401 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3422);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3401);
   }
-  /* ./parser//parser.nit:3424 */
+  /* ./parser//parser.nit:3403 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3424);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3403);
   }
-  /* ./parser//parser.nit:3425 */
-  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3433 */
+  /* ./parser//parser.nit:3404 */
+  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3412 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3434 */
+  /* ./parser//parser.nit:3413 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction74____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3434);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3413);
   }
   REGB0 = ATTR_parser___ReduceAction74____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12899,7 +12855,7 @@ void parser___ReduceAction74___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos77]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3437;
+  fra.me.line = 3416;
   fra.me.meth = LOCATE_parser___ReduceAction74___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12907,7 +12863,7 @@ void parser___ReduceAction74___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3437 */
+  /* ./parser//parser.nit:3416 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction74____goto(fra.me.REG[1]) = REGB0;
@@ -12916,15 +12872,15 @@ void parser___ReduceAction74___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction75___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 = 3441;
+  fra.me.line = 3420;
   fra.me.meth = LOCATE_parser___ReduceAction75___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;
@@ -12933,63 +12889,72 @@ void parser___ReduceAction75___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:3443 */
+  /* ./parser//parser.nit:3422 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3444 */
+  /* ./parser//parser.nit:3423 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3445 */
+  /* ./parser//parser.nit:3424 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3446 */
+  /* ./parser//parser.nit:3425 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3447 */
+  /* ./parser//parser.nit:3426 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3448 */
+  /* ./parser//parser.nit:3427 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3449 */
+  /* ./parser//parser.nit:3428 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3450 */
+  /* ./parser//parser.nit:3429 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3452 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:3430 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3432 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3432);
+  }
+  /* ./parser//parser.nit:3434 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3452);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3434);
   }
-  /* ./parser//parser.nit:3454 */
+  /* ./parser//parser.nit:3436 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3454);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3436);
   }
-  /* ./parser//parser.nit:3456 */
+  /* ./parser//parser.nit:3438 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3456);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3438);
   }
-  /* ./parser//parser.nit:3458 */
+  /* ./parser//parser.nit:3440 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3458);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3440);
   }
-  /* ./parser//parser.nit:3460 */
+  /* ./parser//parser.nit:3442 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3460);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3442);
   }
-  /* ./parser//parser.nit:3461 */
-  fra.me.REG[3] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3469 */
+  /* ./parser//parser.nit:3443 */
+  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3451 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3470 */
+  /* ./parser//parser.nit:3452 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction75____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3470);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3452);
   }
   REGB0 = ATTR_parser___ReduceAction75____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13005,7 +12970,7 @@ void parser___ReduceAction75___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos78]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3473;
+  fra.me.line = 3455;
   fra.me.meth = LOCATE_parser___ReduceAction75___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13013,7 +12978,7 @@ void parser___ReduceAction75___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3473 */
+  /* ./parser//parser.nit:3455 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction75____goto(fra.me.REG[1]) = REGB0;
@@ -13022,15 +12987,15 @@ void parser___ReduceAction75___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction76___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 = 3477;
+  fra.me.line = 3459;
   fra.me.meth = LOCATE_parser___ReduceAction76___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;
@@ -13039,72 +13004,63 @@ void parser___ReduceAction76___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:3479 */
+  /* ./parser//parser.nit:3461 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3480 */
+  /* ./parser//parser.nit:3462 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3481 */
+  /* ./parser//parser.nit:3463 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3482 */
+  /* ./parser//parser.nit:3464 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3483 */
+  /* ./parser//parser.nit:3465 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3484 */
+  /* ./parser//parser.nit:3466 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3485 */
+  /* ./parser//parser.nit:3467 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3486 */
+  /* ./parser//parser.nit:3468 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3487 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3489 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3489);
-  }
-  /* ./parser//parser.nit:3491 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3470 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3491);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3470);
   }
-  /* ./parser//parser.nit:3493 */
+  /* ./parser//parser.nit:3472 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3493);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3472);
   }
-  /* ./parser//parser.nit:3495 */
+  /* ./parser//parser.nit:3474 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3495);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3474);
   }
-  /* ./parser//parser.nit:3497 */
+  /* ./parser//parser.nit:3476 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3497);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3476);
   }
-  /* ./parser//parser.nit:3499 */
+  /* ./parser//parser.nit:3478 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3499);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3478);
   }
-  /* ./parser//parser.nit:3500 */
-  fra.me.REG[3] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3508 */
+  /* ./parser//parser.nit:3479 */
+  fra.me.REG[3] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3487 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3509 */
+  /* ./parser//parser.nit:3488 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction76____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3509);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3488);
   }
   REGB0 = ATTR_parser___ReduceAction76____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13120,7 +13076,7 @@ void parser___ReduceAction76___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos79]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3512;
+  fra.me.line = 3491;
   fra.me.meth = LOCATE_parser___ReduceAction76___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13128,7 +13084,7 @@ void parser___ReduceAction76___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3512 */
+  /* ./parser//parser.nit:3491 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction76____goto(fra.me.REG[1]) = REGB0;
@@ -13137,15 +13093,15 @@ void parser___ReduceAction76___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction77___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 = 3516;
+  fra.me.line = 3495;
   fra.me.meth = LOCATE_parser___ReduceAction77___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;
@@ -13154,63 +13110,72 @@ void parser___ReduceAction77___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:3518 */
+  /* ./parser//parser.nit:3497 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3519 */
+  /* ./parser//parser.nit:3498 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3520 */
+  /* ./parser//parser.nit:3499 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3521 */
+  /* ./parser//parser.nit:3500 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3522 */
+  /* ./parser//parser.nit:3501 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3523 */
+  /* ./parser//parser.nit:3502 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3524 */
+  /* ./parser//parser.nit:3503 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3525 */
+  /* ./parser//parser.nit:3504 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3527 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:3505 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3507 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3507);
+  }
+  /* ./parser//parser.nit:3509 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3527);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3509);
   }
-  /* ./parser//parser.nit:3529 */
+  /* ./parser//parser.nit:3511 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3529);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3511);
   }
-  /* ./parser//parser.nit:3531 */
+  /* ./parser//parser.nit:3513 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3531);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3513);
   }
-  /* ./parser//parser.nit:3533 */
+  /* ./parser//parser.nit:3515 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3533);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3515);
   }
-  /* ./parser//parser.nit:3535 */
+  /* ./parser//parser.nit:3517 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3535);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3517);
   }
-  /* ./parser//parser.nit:3536 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3546 */
+  /* ./parser//parser.nit:3518 */
+  fra.me.REG[3] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3526 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3547 */
+  /* ./parser//parser.nit:3527 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction77____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3547);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3527);
   }
   REGB0 = ATTR_parser___ReduceAction77____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13226,7 +13191,7 @@ void parser___ReduceAction77___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos80]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3550;
+  fra.me.line = 3530;
   fra.me.meth = LOCATE_parser___ReduceAction77___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13234,7 +13199,7 @@ void parser___ReduceAction77___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3550 */
+  /* ./parser//parser.nit:3530 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction77____goto(fra.me.REG[1]) = REGB0;
@@ -13243,15 +13208,15 @@ void parser___ReduceAction77___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction78___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 = 3554;
+  fra.me.line = 3534;
   fra.me.meth = LOCATE_parser___ReduceAction78___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;
@@ -13260,72 +13225,63 @@ void parser___ReduceAction78___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:3556 */
+  /* ./parser//parser.nit:3536 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3557 */
+  /* ./parser//parser.nit:3537 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3558 */
+  /* ./parser//parser.nit:3538 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3559 */
+  /* ./parser//parser.nit:3539 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3560 */
+  /* ./parser//parser.nit:3540 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3561 */
+  /* ./parser//parser.nit:3541 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3562 */
+  /* ./parser//parser.nit:3542 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3563 */
+  /* ./parser//parser.nit:3543 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3564 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3566 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3566);
-  }
-  /* ./parser//parser.nit:3568 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3545 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3568);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3545);
   }
-  /* ./parser//parser.nit:3570 */
+  /* ./parser//parser.nit:3547 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3570);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3547);
   }
-  /* ./parser//parser.nit:3572 */
+  /* ./parser//parser.nit:3549 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3572);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3549);
   }
-  /* ./parser//parser.nit:3574 */
+  /* ./parser//parser.nit:3551 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3574);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3551);
   }
-  /* ./parser//parser.nit:3576 */
+  /* ./parser//parser.nit:3553 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3576);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3553);
   }
-  /* ./parser//parser.nit:3577 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3587 */
+  /* ./parser//parser.nit:3554 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3564 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3588 */
+  /* ./parser//parser.nit:3565 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction78____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3588);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3565);
   }
   REGB0 = ATTR_parser___ReduceAction78____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13341,7 +13297,7 @@ void parser___ReduceAction78___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos81]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3591;
+  fra.me.line = 3568;
   fra.me.meth = LOCATE_parser___ReduceAction78___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13349,7 +13305,7 @@ void parser___ReduceAction78___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3591 */
+  /* ./parser//parser.nit:3568 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction78____goto(fra.me.REG[1]) = REGB0;
@@ -13363,7 +13319,7 @@ void parser___ReduceAction79___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 = 3595;
+  fra.me.line = 3572;
   fra.me.meth = LOCATE_parser___ReduceAction79___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -13378,69 +13334,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:3597 */
+  /* ./parser//parser.nit:3574 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3598 */
+  /* ./parser//parser.nit:3575 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3599 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3600 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3601 */
+  /* ./parser//parser.nit:3576 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3577 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3578 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3602 */
+  /* ./parser//parser.nit:3579 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3603 */
+  /* ./parser//parser.nit:3580 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3604 */
+  /* ./parser//parser.nit:3581 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3605 */
+  /* ./parser//parser.nit:3582 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3607 */
+  /* ./parser//parser.nit:3584 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3607);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3584);
   }
-  /* ./parser//parser.nit:3609 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:3586 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3609);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3586);
   }
-  /* ./parser//parser.nit:3611 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* ./parser//parser.nit:3588 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3611);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3588);
   }
-  /* ./parser//parser.nit:3613 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* ./parser//parser.nit:3590 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3613);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3590);
   }
-  /* ./parser//parser.nit:3615 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:3592 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3615);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3592);
   }
-  /* ./parser//parser.nit:3617 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TString, ID_TString)) /*cast nullable TString*/;
+  /* ./parser//parser.nit:3594 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3617);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3594);
   }
-  /* ./parser//parser.nit:3618 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3628 */
+  /* ./parser//parser.nit:3595 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3605 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3629 */
+  /* ./parser//parser.nit:3606 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction79____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3629);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3606);
   }
   REGB0 = ATTR_parser___ReduceAction79____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13456,7 +13412,7 @@ void parser___ReduceAction79___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos82]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3632;
+  fra.me.line = 3609;
   fra.me.meth = LOCATE_parser___ReduceAction79___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13464,7 +13420,7 @@ void parser___ReduceAction79___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3632 */
+  /* ./parser//parser.nit:3609 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction79____goto(fra.me.REG[1]) = REGB0;
@@ -13473,15 +13429,15 @@ void parser___ReduceAction79___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction80___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 = 3636;
+  fra.me.line = 3613;
   fra.me.meth = LOCATE_parser___ReduceAction80___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;
@@ -13491,80 +13447,71 @@ void parser___ReduceAction80___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:3638 */
+  /* ./parser//parser.nit:3615 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3639 */
+  /* ./parser//parser.nit:3616 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3640 */
+  /* ./parser//parser.nit:3617 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3641 */
+  /* ./parser//parser.nit:3618 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3642 */
+  /* ./parser//parser.nit:3619 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3643 */
+  /* ./parser//parser.nit:3620 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3644 */
+  /* ./parser//parser.nit:3621 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3645 */
+  /* ./parser//parser.nit:3622 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3646 */
+  /* ./parser//parser.nit:3623 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3647 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3649 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3649);
-  }
-  /* ./parser//parser.nit:3651 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3625 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3651);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3625);
   }
-  /* ./parser//parser.nit:3653 */
+  /* ./parser//parser.nit:3627 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3653);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3627);
   }
-  /* ./parser//parser.nit:3655 */
+  /* ./parser//parser.nit:3629 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3655);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3629);
   }
-  /* ./parser//parser.nit:3657 */
+  /* ./parser//parser.nit:3631 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3657);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3631);
   }
-  /* ./parser//parser.nit:3659 */
+  /* ./parser//parser.nit:3633 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3633);
   }
-  /* ./parser//parser.nit:3661 */
+  /* ./parser//parser.nit:3635 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TString, ID_TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3661);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3635);
   }
-  /* ./parser//parser.nit:3662 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3672 */
+  /* ./parser//parser.nit:3636 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:3646 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3673 */
+  /* ./parser//parser.nit:3647 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction80____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3673);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3647);
   }
   REGB0 = ATTR_parser___ReduceAction80____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13580,7 +13527,7 @@ void parser___ReduceAction80___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos83]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3676;
+  fra.me.line = 3650;
   fra.me.meth = LOCATE_parser___ReduceAction80___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13588,7 +13535,7 @@ void parser___ReduceAction80___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3676 */
+  /* ./parser//parser.nit:3650 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction80____goto(fra.me.REG[1]) = REGB0;
@@ -13597,15 +13544,15 @@ void parser___ReduceAction80___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction81___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 = 3680;
+  fra.me.line = 3654;
   fra.me.meth = LOCATE_parser___ReduceAction81___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;
@@ -13615,71 +13562,80 @@ void parser___ReduceAction81___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:3682 */
+  /* ./parser//parser.nit:3656 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3683 */
+  /* ./parser//parser.nit:3657 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3684 */
+  /* ./parser//parser.nit:3658 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3685 */
+  /* ./parser//parser.nit:3659 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3686 */
+  /* ./parser//parser.nit:3660 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3687 */
+  /* ./parser//parser.nit:3661 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3688 */
+  /* ./parser//parser.nit:3662 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3689 */
+  /* ./parser//parser.nit:3663 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3690 */
+  /* ./parser//parser.nit:3664 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3692 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:3665 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3667 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3692);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3667);
   }
-  /* ./parser//parser.nit:3694 */
+  /* ./parser//parser.nit:3669 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3669);
+  }
+  /* ./parser//parser.nit:3671 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3694);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3671);
   }
-  /* ./parser//parser.nit:3696 */
+  /* ./parser//parser.nit:3673 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3696);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3673);
   }
-  /* ./parser//parser.nit:3698 */
+  /* ./parser//parser.nit:3675 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3698);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3675);
   }
-  /* ./parser//parser.nit:3700 */
+  /* ./parser//parser.nit:3677 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3700);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3677);
   }
-  /* ./parser//parser.nit:3702 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExternCalls, ID_AExternCalls)) /*cast nullable AExternCalls*/;
+  /* ./parser//parser.nit:3679 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TString, ID_TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3702);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3679);
   }
-  /* ./parser//parser.nit:3703 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:3713 */
+  /* ./parser//parser.nit:3680 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:3690 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3714 */
+  /* ./parser//parser.nit:3691 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction81____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3714);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3691);
   }
   REGB0 = ATTR_parser___ReduceAction81____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13695,7 +13651,7 @@ void parser___ReduceAction81___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos84]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3717;
+  fra.me.line = 3694;
   fra.me.meth = LOCATE_parser___ReduceAction81___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13703,7 +13659,7 @@ void parser___ReduceAction81___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3717 */
+  /* ./parser//parser.nit:3694 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction81____goto(fra.me.REG[1]) = REGB0;
@@ -13712,15 +13668,15 @@ void parser___ReduceAction81___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction82___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 = 3721;
+  fra.me.line = 3698;
   fra.me.meth = LOCATE_parser___ReduceAction82___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;
@@ -13730,80 +13686,71 @@ void parser___ReduceAction82___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:3723 */
+  /* ./parser//parser.nit:3700 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3724 */
+  /* ./parser//parser.nit:3701 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3725 */
+  /* ./parser//parser.nit:3702 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3726 */
+  /* ./parser//parser.nit:3703 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3727 */
+  /* ./parser//parser.nit:3704 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3728 */
+  /* ./parser//parser.nit:3705 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3729 */
+  /* ./parser//parser.nit:3706 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3730 */
+  /* ./parser//parser.nit:3707 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3731 */
+  /* ./parser//parser.nit:3708 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3732 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3734 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3734);
-  }
-  /* ./parser//parser.nit:3736 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3710 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3736);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3710);
   }
-  /* ./parser//parser.nit:3738 */
+  /* ./parser//parser.nit:3712 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3738);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3712);
   }
-  /* ./parser//parser.nit:3740 */
+  /* ./parser//parser.nit:3714 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3740);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3714);
   }
-  /* ./parser//parser.nit:3742 */
+  /* ./parser//parser.nit:3716 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3742);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3716);
   }
-  /* ./parser//parser.nit:3744 */
+  /* ./parser//parser.nit:3718 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3744);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3718);
   }
-  /* ./parser//parser.nit:3746 */
+  /* ./parser//parser.nit:3720 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExternCalls, ID_AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3746);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3720);
   }
-  /* ./parser//parser.nit:3747 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:3757 */
+  /* ./parser//parser.nit:3721 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:3731 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3758 */
+  /* ./parser//parser.nit:3732 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction82____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3758);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3732);
   }
   REGB0 = ATTR_parser___ReduceAction82____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13819,7 +13766,7 @@ void parser___ReduceAction82___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos85]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3761;
+  fra.me.line = 3735;
   fra.me.meth = LOCATE_parser___ReduceAction82___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13827,7 +13774,7 @@ void parser___ReduceAction82___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3761 */
+  /* ./parser//parser.nit:3735 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction82____goto(fra.me.REG[1]) = REGB0;
@@ -13841,7 +13788,7 @@ void parser___ReduceAction83___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 = 3765;
+  fra.me.line = 3739;
   fra.me.meth = LOCATE_parser___ReduceAction83___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -13857,77 +13804,77 @@ void parser___ReduceAction83___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3767 */
+  /* ./parser//parser.nit:3741 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3768 */
+  /* ./parser//parser.nit:3742 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3769 */
+  /* ./parser//parser.nit:3743 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3770 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3771 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3772 */
+  /* ./parser//parser.nit:3744 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3745 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3746 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3773 */
+  /* ./parser//parser.nit:3747 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3774 */
+  /* ./parser//parser.nit:3748 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3775 */
+  /* ./parser//parser.nit:3749 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3776 */
+  /* ./parser//parser.nit:3750 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3778 */
+  /* ./parser//parser.nit:3752 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3778);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3752);
   }
-  /* ./parser//parser.nit:3780 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:3754 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3780);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3754);
   }
-  /* ./parser//parser.nit:3782 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* ./parser//parser.nit:3756 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3782);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3756);
   }
-  /* ./parser//parser.nit:3784 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* ./parser//parser.nit:3758 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3784);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3758);
   }
-  /* ./parser//parser.nit:3786 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:3760 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3786);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3760);
   }
-  /* ./parser//parser.nit:3788 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TString, ID_TString)) /*cast nullable TString*/;
+  /* ./parser//parser.nit:3762 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3788);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3762);
   }
-  /* ./parser//parser.nit:3790 */
+  /* ./parser//parser.nit:3764 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExternCalls, ID_AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3790);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3764);
   }
-  /* ./parser//parser.nit:3791 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3801 */
+  /* ./parser//parser.nit:3765 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:3775 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3802 */
+  /* ./parser//parser.nit:3776 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction83____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3802);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3776);
   }
   REGB0 = ATTR_parser___ReduceAction83____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13943,7 +13890,7 @@ void parser___ReduceAction83___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos86]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3805;
+  fra.me.line = 3779;
   fra.me.meth = LOCATE_parser___ReduceAction83___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13951,7 +13898,7 @@ void parser___ReduceAction83___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3805 */
+  /* ./parser//parser.nit:3779 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction83____goto(fra.me.REG[1]) = REGB0;
@@ -13960,15 +13907,15 @@ void parser___ReduceAction83___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction84___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;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3809;
+  fra.me.line = 3783;
   fra.me.meth = LOCATE_parser___ReduceAction84___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;
@@ -13979,88 +13926,79 @@ void parser___ReduceAction84___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:3811 */
+  /* ./parser//parser.nit:3785 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3812 */
+  /* ./parser//parser.nit:3786 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3813 */
+  /* ./parser//parser.nit:3787 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3814 */
+  /* ./parser//parser.nit:3788 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3815 */
+  /* ./parser//parser.nit:3789 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3816 */
+  /* ./parser//parser.nit:3790 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3817 */
+  /* ./parser//parser.nit:3791 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3818 */
+  /* ./parser//parser.nit:3792 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3819 */
+  /* ./parser//parser.nit:3793 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3820 */
+  /* ./parser//parser.nit:3794 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3821 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3823 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3823);
-  }
-  /* ./parser//parser.nit:3825 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3796 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3825);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3796);
   }
-  /* ./parser//parser.nit:3827 */
+  /* ./parser//parser.nit:3798 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3827);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3798);
   }
-  /* ./parser//parser.nit:3829 */
+  /* ./parser//parser.nit:3800 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3829);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3800);
   }
-  /* ./parser//parser.nit:3831 */
+  /* ./parser//parser.nit:3802 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3831);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3802);
   }
-  /* ./parser//parser.nit:3833 */
+  /* ./parser//parser.nit:3804 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3833);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3804);
   }
-  /* ./parser//parser.nit:3835 */
+  /* ./parser//parser.nit:3806 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TString, ID_TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3835);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3806);
   }
-  /* ./parser//parser.nit:3837 */
+  /* ./parser//parser.nit:3808 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExternCalls, ID_AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3837);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3808);
   }
-  /* ./parser//parser.nit:3838 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3848 */
+  /* ./parser//parser.nit:3809 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3819 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3849 */
+  /* ./parser//parser.nit:3820 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction84____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3849);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3820);
   }
   REGB0 = ATTR_parser___ReduceAction84____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14076,7 +14014,7 @@ void parser___ReduceAction84___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos87]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3852;
+  fra.me.line = 3823;
   fra.me.meth = LOCATE_parser___ReduceAction84___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14084,7 +14022,7 @@ void parser___ReduceAction84___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3852 */
+  /* ./parser//parser.nit:3823 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction84____goto(fra.me.REG[1]) = REGB0;
@@ -14093,15 +14031,15 @@ void parser___ReduceAction84___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction85___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 = 3856;
+  fra.me.line = 3827;
   fra.me.meth = LOCATE_parser___ReduceAction85___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;
@@ -14109,51 +14047,91 @@ 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[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:3858 */
+  /* ./parser//parser.nit:3829 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3859 */
+  /* ./parser//parser.nit:3830 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3860 */
+  /* ./parser//parser.nit:3831 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3861 */
+  /* ./parser//parser.nit:3832 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3833 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3862 */
+  /* ./parser//parser.nit:3834 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3835 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3864 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:3836 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3837 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3838 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3839 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3841 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3864);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3841);
   }
-  /* ./parser//parser.nit:3866 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:3843 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3866);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3843);
   }
-  /* ./parser//parser.nit:3868 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:3845 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3868);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3845);
   }
-  /* ./parser//parser.nit:3870 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:3847 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3870);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3847);
   }
-  /* ./parser//parser.nit:3871 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3883 */
+  /* ./parser//parser.nit:3849 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3849);
+  }
+  /* ./parser//parser.nit:3851 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3851);
+  }
+  /* ./parser//parser.nit:3853 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TString, ID_TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3853);
+  }
+  /* ./parser//parser.nit:3855 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExternCalls, ID_AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3855);
+  }
+  /* ./parser//parser.nit:3856 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3866 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3884 */
+  /* ./parser//parser.nit:3867 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction85____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3884);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3867);
   }
   REGB0 = ATTR_parser___ReduceAction85____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14169,7 +14147,7 @@ void parser___ReduceAction85___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos88]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3887;
+  fra.me.line = 3870;
   fra.me.meth = LOCATE_parser___ReduceAction85___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14177,7 +14155,7 @@ void parser___ReduceAction85___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3887 */
+  /* ./parser//parser.nit:3870 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction85____goto(fra.me.REG[1]) = REGB0;
@@ -14186,15 +14164,15 @@ void parser___ReduceAction85___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction86___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[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 = 3891;
+  fra.me.line = 3874;
   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;
@@ -14202,60 +14180,51 @@ void parser___ReduceAction86___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:3893 */
+  /* ./parser//parser.nit:3876 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3894 */
+  /* ./parser//parser.nit:3877 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3895 */
+  /* ./parser//parser.nit:3878 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3896 */
+  /* ./parser//parser.nit:3879 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3897 */
+  /* ./parser//parser.nit:3880 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3898 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3900 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3900);
-  }
-  /* ./parser//parser.nit:3902 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3882 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3902);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3882);
   }
-  /* ./parser//parser.nit:3904 */
+  /* ./parser//parser.nit:3884 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3904);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3884);
   }
-  /* ./parser//parser.nit:3906 */
+  /* ./parser//parser.nit:3886 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3906);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3886);
   }
-  /* ./parser//parser.nit:3908 */
+  /* ./parser//parser.nit:3888 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3908);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3888);
   }
-  /* ./parser//parser.nit:3909 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3921 */
+  /* ./parser//parser.nit:3889 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3901 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3922 */
+  /* ./parser//parser.nit:3902 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction86____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3922);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3902);
   }
   REGB0 = ATTR_parser___ReduceAction86____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14271,7 +14240,7 @@ void parser___ReduceAction86___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos89]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3925;
+  fra.me.line = 3905;
   fra.me.meth = LOCATE_parser___ReduceAction86___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14279,7 +14248,7 @@ void parser___ReduceAction86___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3925 */
+  /* ./parser//parser.nit:3905 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction86____goto(fra.me.REG[1]) = REGB0;
@@ -14293,7 +14262,7 @@ void parser___ReduceAction87___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 = 3929;
+  fra.me.line = 3909;
   fra.me.meth = LOCATE_parser___ReduceAction87___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -14307,57 +14276,57 @@ void parser___ReduceAction87___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3931 */
+  /* ./parser//parser.nit:3911 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3932 */
+  /* ./parser//parser.nit:3912 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3933 */
+  /* ./parser//parser.nit:3913 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3934 */
+  /* ./parser//parser.nit:3914 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3935 */
+  /* ./parser//parser.nit:3915 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3936 */
+  /* ./parser//parser.nit:3916 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3938 */
+  /* ./parser//parser.nit:3918 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3938);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3918);
   }
-  /* ./parser//parser.nit:3940 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:3920 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3940);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3920);
   }
-  /* ./parser//parser.nit:3942 */
+  /* ./parser//parser.nit:3922 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3942);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3922);
   }
-  /* ./parser//parser.nit:3944 */
+  /* ./parser//parser.nit:3924 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3944);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3924);
   }
-  /* ./parser//parser.nit:3946 */
+  /* ./parser//parser.nit:3926 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3946);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3926);
   }
-  /* ./parser//parser.nit:3947 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], fra.me.REG[6], NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3959 */
+  /* ./parser//parser.nit:3927 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3939 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3960 */
+  /* ./parser//parser.nit:3940 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction87____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3960);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3940);
   }
   REGB0 = ATTR_parser___ReduceAction87____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14373,7 +14342,7 @@ void parser___ReduceAction87___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos90]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3963;
+  fra.me.line = 3943;
   fra.me.meth = LOCATE_parser___ReduceAction87___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14381,7 +14350,7 @@ void parser___ReduceAction87___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3963 */
+  /* ./parser//parser.nit:3943 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction87____goto(fra.me.REG[1]) = REGB0;
@@ -14390,15 +14359,15 @@ void parser___ReduceAction87___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction88___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 = 3967;
+  fra.me.line = 3947;
   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;
@@ -14407,68 +14376,59 @@ void parser___ReduceAction88___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:3969 */
+  /* ./parser//parser.nit:3949 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3970 */
+  /* ./parser//parser.nit:3950 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3971 */
+  /* ./parser//parser.nit:3951 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3972 */
+  /* ./parser//parser.nit:3952 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3973 */
+  /* ./parser//parser.nit:3953 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3974 */
+  /* ./parser//parser.nit:3954 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3975 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3977 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3977);
-  }
-  /* ./parser//parser.nit:3979 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:3956 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3979);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3956);
   }
-  /* ./parser//parser.nit:3981 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3958 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3981);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3958);
   }
-  /* ./parser//parser.nit:3983 */
+  /* ./parser//parser.nit:3960 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3983);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3960);
   }
-  /* ./parser//parser.nit:3985 */
+  /* ./parser//parser.nit:3962 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3985);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3962);
   }
-  /* ./parser//parser.nit:3987 */
+  /* ./parser//parser.nit:3964 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3987);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3964);
   }
-  /* ./parser//parser.nit:3988 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:4000 */
+  /* ./parser//parser.nit:3965 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], fra.me.REG[6], NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3977 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4001 */
+  /* ./parser//parser.nit:3978 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction88____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4001);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3978);
   }
   REGB0 = ATTR_parser___ReduceAction88____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14484,7 +14444,7 @@ void parser___ReduceAction88___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos91]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4004;
+  fra.me.line = 3981;
   fra.me.meth = LOCATE_parser___ReduceAction88___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14492,7 +14452,7 @@ void parser___ReduceAction88___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4004 */
+  /* ./parser//parser.nit:3981 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction88____goto(fra.me.REG[1]) = REGB0;
@@ -14501,15 +14461,15 @@ void parser___ReduceAction88___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction89___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 = 4008;
+  fra.me.line = 3985;
   fra.me.meth = LOCATE_parser___ReduceAction89___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;
@@ -14518,59 +14478,68 @@ void parser___ReduceAction89___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:4010 */
+  /* ./parser//parser.nit:3987 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4011 */
+  /* ./parser//parser.nit:3988 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4012 */
+  /* ./parser//parser.nit:3989 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4013 */
+  /* ./parser//parser.nit:3990 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4014 */
+  /* ./parser//parser.nit:3991 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4015 */
+  /* ./parser//parser.nit:3992 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4017 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:3993 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3995 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4017);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3995);
   }
-  /* ./parser//parser.nit:4019 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:3997 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3997);
+  }
+  /* ./parser//parser.nit:3999 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4019);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3999);
   }
-  /* ./parser//parser.nit:4021 */
+  /* ./parser//parser.nit:4001 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4021);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4001);
   }
-  /* ./parser//parser.nit:4023 */
+  /* ./parser//parser.nit:4003 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4023);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4003);
   }
-  /* ./parser//parser.nit:4025 */
+  /* ./parser//parser.nit:4005 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4025);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4005);
   }
-  /* ./parser//parser.nit:4026 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:4038 */
+  /* ./parser//parser.nit:4006 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:4018 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4039 */
+  /* ./parser//parser.nit:4019 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction89____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4039);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4019);
   }
   REGB0 = ATTR_parser___ReduceAction89____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14586,7 +14555,7 @@ void parser___ReduceAction89___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos92]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4042;
+  fra.me.line = 4022;
   fra.me.meth = LOCATE_parser___ReduceAction89___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14594,7 +14563,7 @@ void parser___ReduceAction89___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4042 */
+  /* ./parser//parser.nit:4022 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction89____goto(fra.me.REG[1]) = REGB0;
@@ -14603,15 +14572,15 @@ void parser___ReduceAction89___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction90___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 = 4046;
+  fra.me.line = 4026;
   fra.me.meth = LOCATE_parser___ReduceAction90___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;
@@ -14620,68 +14589,59 @@ void parser___ReduceAction90___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:4048 */
+  /* ./parser//parser.nit:4028 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4049 */
+  /* ./parser//parser.nit:4029 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4050 */
+  /* ./parser//parser.nit:4030 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4051 */
+  /* ./parser//parser.nit:4031 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4052 */
+  /* ./parser//parser.nit:4032 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4053 */
+  /* ./parser//parser.nit:4033 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4054 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4056 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4056);
-  }
-  /* ./parser//parser.nit:4058 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4035 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4058);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4035);
   }
-  /* ./parser//parser.nit:4060 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4037 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4060);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4037);
   }
-  /* ./parser//parser.nit:4062 */
+  /* ./parser//parser.nit:4039 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4062);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4039);
   }
-  /* ./parser//parser.nit:4064 */
+  /* ./parser//parser.nit:4041 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4064);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4041);
   }
-  /* ./parser//parser.nit:4066 */
+  /* ./parser//parser.nit:4043 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4066);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4043);
   }
-  /* ./parser//parser.nit:4067 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:4079 */
+  /* ./parser//parser.nit:4044 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:4056 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4080 */
+  /* ./parser//parser.nit:4057 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction90____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4080);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4057);
   }
   REGB0 = ATTR_parser___ReduceAction90____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14697,7 +14657,7 @@ void parser___ReduceAction90___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos93]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4083;
+  fra.me.line = 4060;
   fra.me.meth = LOCATE_parser___ReduceAction90___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14705,7 +14665,7 @@ void parser___ReduceAction90___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4083 */
+  /* ./parser//parser.nit:4060 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction90____goto(fra.me.REG[1]) = REGB0;
@@ -14719,7 +14679,7 @@ void parser___ReduceAction91___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 = 4087;
+  fra.me.line = 4064;
   fra.me.meth = LOCATE_parser___ReduceAction91___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -14734,65 +14694,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:4089 */
+  /* ./parser//parser.nit:4066 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4090 */
+  /* ./parser//parser.nit:4067 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4091 */
+  /* ./parser//parser.nit:4068 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4092 */
+  /* ./parser//parser.nit:4069 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4093 */
+  /* ./parser//parser.nit:4070 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4094 */
+  /* ./parser//parser.nit:4071 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4095 */
+  /* ./parser//parser.nit:4072 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4097 */
+  /* ./parser//parser.nit:4074 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4097);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4074);
   }
-  /* ./parser//parser.nit:4099 */
+  /* ./parser//parser.nit:4076 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4099);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4076);
   }
-  /* ./parser//parser.nit:4101 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4078 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4101);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4078);
   }
-  /* ./parser//parser.nit:4103 */
+  /* ./parser//parser.nit:4080 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4103);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4080);
   }
-  /* ./parser//parser.nit:4105 */
+  /* ./parser//parser.nit:4082 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4105);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4082);
   }
-  /* ./parser//parser.nit:4107 */
+  /* ./parser//parser.nit:4084 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4107);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4084);
   }
-  /* ./parser//parser.nit:4108 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:4120 */
+  /* ./parser//parser.nit:4085 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:4097 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4121 */
+  /* ./parser//parser.nit:4098 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction91____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4121);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4098);
   }
   REGB0 = ATTR_parser___ReduceAction91____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14808,7 +14768,7 @@ void parser___ReduceAction91___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos94]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4124;
+  fra.me.line = 4101;
   fra.me.meth = LOCATE_parser___ReduceAction91___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14816,7 +14776,7 @@ void parser___ReduceAction91___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4124 */
+  /* ./parser//parser.nit:4101 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction91____goto(fra.me.REG[1]) = REGB0;
@@ -14825,15 +14785,15 @@ void parser___ReduceAction91___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction92___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 = 4128;
+  fra.me.line = 4105;
   fra.me.meth = LOCATE_parser___ReduceAction92___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;
@@ -14843,76 +14803,67 @@ void parser___ReduceAction92___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:4130 */
+  /* ./parser//parser.nit:4107 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4131 */
+  /* ./parser//parser.nit:4108 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4132 */
+  /* ./parser//parser.nit:4109 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4133 */
+  /* ./parser//parser.nit:4110 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4134 */
+  /* ./parser//parser.nit:4111 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4135 */
+  /* ./parser//parser.nit:4112 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4136 */
+  /* ./parser//parser.nit:4113 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4137 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4139 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4139);
-  }
-  /* ./parser//parser.nit:4141 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4115 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4141);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4115);
   }
-  /* ./parser//parser.nit:4143 */
+  /* ./parser//parser.nit:4117 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4143);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4117);
   }
-  /* ./parser//parser.nit:4145 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4119 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4145);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4119);
   }
-  /* ./parser//parser.nit:4147 */
+  /* ./parser//parser.nit:4121 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4147);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4121);
   }
-  /* ./parser//parser.nit:4149 */
+  /* ./parser//parser.nit:4123 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4149);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4123);
   }
-  /* ./parser//parser.nit:4151 */
+  /* ./parser//parser.nit:4125 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4151);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4125);
   }
-  /* ./parser//parser.nit:4152 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:4164 */
+  /* ./parser//parser.nit:4126 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:4138 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4165 */
+  /* ./parser//parser.nit:4139 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction92____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4165);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4139);
   }
   REGB0 = ATTR_parser___ReduceAction92____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14928,7 +14879,7 @@ void parser___ReduceAction92___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos95]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4168;
+  fra.me.line = 4142;
   fra.me.meth = LOCATE_parser___ReduceAction92___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14936,7 +14887,7 @@ void parser___ReduceAction92___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4168 */
+  /* ./parser//parser.nit:4142 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction92____goto(fra.me.REG[1]) = REGB0;
@@ -14945,15 +14896,15 @@ void parser___ReduceAction92___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction93___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 = 4172;
+  fra.me.line = 4146;
   fra.me.meth = LOCATE_parser___ReduceAction93___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;
@@ -14962,59 +14913,77 @@ 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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4174 */
+  /* ./parser//parser.nit:4148 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4175 */
+  /* ./parser//parser.nit:4149 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4176 */
+  /* ./parser//parser.nit:4150 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4177 */
+  /* ./parser//parser.nit:4151 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4178 */
+  /* ./parser//parser.nit:4152 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4179 */
+  /* ./parser//parser.nit:4153 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4181 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4154 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4155 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4157 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4181);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4157);
   }
-  /* ./parser//parser.nit:4183 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:4159 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4183);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4159);
   }
-  /* ./parser//parser.nit:4185 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:4161 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4185);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4161);
   }
-  /* ./parser//parser.nit:4187 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:4163 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4187);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4163);
   }
-  /* ./parser//parser.nit:4189 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:4165 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4189);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4165);
   }
-  /* ./parser//parser.nit:4190 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4202 */
+  /* ./parser//parser.nit:4167 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4167);
+  }
+  /* ./parser//parser.nit:4169 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4169);
+  }
+  /* ./parser//parser.nit:4170 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:4182 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4203 */
+  /* ./parser//parser.nit:4183 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction93____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4203);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4183);
   }
   REGB0 = ATTR_parser___ReduceAction93____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15030,7 +14999,7 @@ void parser___ReduceAction93___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos96]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4206;
+  fra.me.line = 4186;
   fra.me.meth = LOCATE_parser___ReduceAction93___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15038,7 +15007,7 @@ void parser___ReduceAction93___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4206 */
+  /* ./parser//parser.nit:4186 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction93____goto(fra.me.REG[1]) = REGB0;
@@ -15047,15 +15016,15 @@ void parser___ReduceAction93___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction94___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 = 4210;
+  fra.me.line = 4190;
   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;
@@ -15064,68 +15033,59 @@ void parser___ReduceAction94___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:4212 */
+  /* ./parser//parser.nit:4192 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4213 */
+  /* ./parser//parser.nit:4193 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4214 */
+  /* ./parser//parser.nit:4194 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4215 */
+  /* ./parser//parser.nit:4195 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4216 */
+  /* ./parser//parser.nit:4196 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4217 */
+  /* ./parser//parser.nit:4197 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4218 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4220 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4220);
-  }
-  /* ./parser//parser.nit:4222 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4199 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4222);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4199);
   }
-  /* ./parser//parser.nit:4224 */
+  /* ./parser//parser.nit:4201 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4224);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4201);
   }
-  /* ./parser//parser.nit:4226 */
+  /* ./parser//parser.nit:4203 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4226);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4203);
   }
-  /* ./parser//parser.nit:4228 */
+  /* ./parser//parser.nit:4205 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4228);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4205);
   }
-  /* ./parser//parser.nit:4230 */
+  /* ./parser//parser.nit:4207 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4230);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4207);
   }
-  /* ./parser//parser.nit:4231 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4243 */
+  /* ./parser//parser.nit:4208 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4220 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4244 */
+  /* ./parser//parser.nit:4221 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction94____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4244);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4221);
   }
   REGB0 = ATTR_parser___ReduceAction94____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15141,7 +15101,7 @@ void parser___ReduceAction94___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos97]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4247;
+  fra.me.line = 4224;
   fra.me.meth = LOCATE_parser___ReduceAction94___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15149,7 +15109,7 @@ void parser___ReduceAction94___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4247 */
+  /* ./parser//parser.nit:4224 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction94____goto(fra.me.REG[1]) = REGB0;
@@ -15163,7 +15123,7 @@ void parser___ReduceAction95___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 = 4251;
+  fra.me.line = 4228;
   fra.me.meth = LOCATE_parser___ReduceAction95___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -15178,65 +15138,65 @@ void parser___ReduceAction95___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4253 */
+  /* ./parser//parser.nit:4230 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4254 */
+  /* ./parser//parser.nit:4231 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4255 */
+  /* ./parser//parser.nit:4232 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4256 */
+  /* ./parser//parser.nit:4233 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4257 */
+  /* ./parser//parser.nit:4234 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4258 */
+  /* ./parser//parser.nit:4235 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4259 */
+  /* ./parser//parser.nit:4236 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4261 */
+  /* ./parser//parser.nit:4238 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4261);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4238);
   }
-  /* ./parser//parser.nit:4263 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4240 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4263);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4240);
   }
-  /* ./parser//parser.nit:4265 */
+  /* ./parser//parser.nit:4242 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4265);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4242);
   }
-  /* ./parser//parser.nit:4267 */
+  /* ./parser//parser.nit:4244 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4267);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4244);
   }
-  /* ./parser//parser.nit:4269 */
+  /* ./parser//parser.nit:4246 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4269);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4246);
   }
-  /* ./parser//parser.nit:4271 */
+  /* ./parser//parser.nit:4248 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4271);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4248);
   }
-  /* ./parser//parser.nit:4272 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4284 */
+  /* ./parser//parser.nit:4249 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4261 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4285 */
+  /* ./parser//parser.nit:4262 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction95____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4285);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4262);
   }
   REGB0 = ATTR_parser___ReduceAction95____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15252,7 +15212,7 @@ void parser___ReduceAction95___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos98]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4288;
+  fra.me.line = 4265;
   fra.me.meth = LOCATE_parser___ReduceAction95___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15260,7 +15220,7 @@ void parser___ReduceAction95___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4288 */
+  /* ./parser//parser.nit:4265 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction95____goto(fra.me.REG[1]) = REGB0;
@@ -15269,15 +15229,15 @@ void parser___ReduceAction95___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction96___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 = 4292;
+  fra.me.line = 4269;
   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;
@@ -15287,76 +15247,67 @@ void parser___ReduceAction96___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:4294 */
+  /* ./parser//parser.nit:4271 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4295 */
+  /* ./parser//parser.nit:4272 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4296 */
+  /* ./parser//parser.nit:4273 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4297 */
+  /* ./parser//parser.nit:4274 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4298 */
+  /* ./parser//parser.nit:4275 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4299 */
+  /* ./parser//parser.nit:4276 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4300 */
+  /* ./parser//parser.nit:4277 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4301 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4303 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4303);
-  }
-  /* ./parser//parser.nit:4305 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4279 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4305);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4279);
   }
-  /* ./parser//parser.nit:4307 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4281 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4307);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4281);
   }
-  /* ./parser//parser.nit:4309 */
+  /* ./parser//parser.nit:4283 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4309);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4283);
   }
-  /* ./parser//parser.nit:4311 */
+  /* ./parser//parser.nit:4285 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4311);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4285);
   }
-  /* ./parser//parser.nit:4313 */
+  /* ./parser//parser.nit:4287 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4313);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4287);
   }
-  /* ./parser//parser.nit:4315 */
+  /* ./parser//parser.nit:4289 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4315);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4289);
   }
-  /* ./parser//parser.nit:4316 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4328 */
+  /* ./parser//parser.nit:4290 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4302 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4329 */
+  /* ./parser//parser.nit:4303 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction96____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4329);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4303);
   }
   REGB0 = ATTR_parser___ReduceAction96____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15372,7 +15323,7 @@ void parser___ReduceAction96___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos99]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4332;
+  fra.me.line = 4306;
   fra.me.meth = LOCATE_parser___ReduceAction96___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15380,7 +15331,7 @@ void parser___ReduceAction96___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4332 */
+  /* ./parser//parser.nit:4306 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction96____goto(fra.me.REG[1]) = REGB0;
@@ -15389,15 +15340,15 @@ void parser___ReduceAction96___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction97___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 = 4336;
+  fra.me.line = 4310;
   fra.me.meth = LOCATE_parser___ReduceAction97___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;
@@ -15407,67 +15358,76 @@ void parser___ReduceAction97___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:4338 */
+  /* ./parser//parser.nit:4312 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4339 */
+  /* ./parser//parser.nit:4313 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4340 */
+  /* ./parser//parser.nit:4314 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4341 */
+  /* ./parser//parser.nit:4315 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4342 */
+  /* ./parser//parser.nit:4316 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4343 */
+  /* ./parser//parser.nit:4317 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4344 */
+  /* ./parser//parser.nit:4318 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4346 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4319 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4321 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4346);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4321);
   }
-  /* ./parser//parser.nit:4348 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4323 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4348);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4323);
   }
-  /* ./parser//parser.nit:4350 */
+  /* ./parser//parser.nit:4325 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4325);
+  }
+  /* ./parser//parser.nit:4327 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4350);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4327);
   }
-  /* ./parser//parser.nit:4352 */
+  /* ./parser//parser.nit:4329 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4352);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4329);
   }
-  /* ./parser//parser.nit:4354 */
+  /* ./parser//parser.nit:4331 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4354);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4331);
   }
-  /* ./parser//parser.nit:4356 */
+  /* ./parser//parser.nit:4333 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4356);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4333);
   }
-  /* ./parser//parser.nit:4357 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4369 */
+  /* ./parser//parser.nit:4334 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4346 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4370 */
+  /* ./parser//parser.nit:4347 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction97____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4370);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4347);
   }
   REGB0 = ATTR_parser___ReduceAction97____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15483,7 +15443,7 @@ void parser___ReduceAction97___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos100]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4373;
+  fra.me.line = 4350;
   fra.me.meth = LOCATE_parser___ReduceAction97___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15491,7 +15451,7 @@ void parser___ReduceAction97___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4373 */
+  /* ./parser//parser.nit:4350 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction97____goto(fra.me.REG[1]) = REGB0;
@@ -15500,15 +15460,15 @@ void parser___ReduceAction97___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction98___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 = 4377;
+  fra.me.line = 4354;
   fra.me.meth = LOCATE_parser___ReduceAction98___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;
@@ -15518,76 +15478,67 @@ 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:4379 */
+  /* ./parser//parser.nit:4356 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4380 */
+  /* ./parser//parser.nit:4357 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4381 */
+  /* ./parser//parser.nit:4358 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4382 */
+  /* ./parser//parser.nit:4359 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4383 */
+  /* ./parser//parser.nit:4360 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4384 */
+  /* ./parser//parser.nit:4361 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4385 */
+  /* ./parser//parser.nit:4362 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4386 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4388 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4388);
-  }
-  /* ./parser//parser.nit:4390 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4364 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4390);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4364);
   }
-  /* ./parser//parser.nit:4392 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4366 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4392);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4366);
   }
-  /* ./parser//parser.nit:4394 */
+  /* ./parser//parser.nit:4368 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4394);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4368);
   }
-  /* ./parser//parser.nit:4396 */
+  /* ./parser//parser.nit:4370 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4396);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4370);
   }
-  /* ./parser//parser.nit:4398 */
+  /* ./parser//parser.nit:4372 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4398);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4372);
   }
-  /* ./parser//parser.nit:4400 */
+  /* ./parser//parser.nit:4374 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4400);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4374);
   }
-  /* ./parser//parser.nit:4401 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4413 */
+  /* ./parser//parser.nit:4375 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4387 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4414 */
+  /* ./parser//parser.nit:4388 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction98____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4414);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4388);
   }
   REGB0 = ATTR_parser___ReduceAction98____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15603,7 +15554,7 @@ void parser___ReduceAction98___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos101]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4417;
+  fra.me.line = 4391;
   fra.me.meth = LOCATE_parser___ReduceAction98___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15611,7 +15562,7 @@ void parser___ReduceAction98___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4417 */
+  /* ./parser//parser.nit:4391 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction98____goto(fra.me.REG[1]) = REGB0;
@@ -15625,7 +15576,7 @@ void parser___ReduceAction99___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 = 4421;
+  fra.me.line = 4395;
   fra.me.meth = LOCATE_parser___ReduceAction99___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -15641,73 +15592,73 @@ void parser___ReduceAction99___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4423 */
+  /* ./parser//parser.nit:4397 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4424 */
+  /* ./parser//parser.nit:4398 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4425 */
+  /* ./parser//parser.nit:4399 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4426 */
+  /* ./parser//parser.nit:4400 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4427 */
+  /* ./parser//parser.nit:4401 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4428 */
+  /* ./parser//parser.nit:4402 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4429 */
+  /* ./parser//parser.nit:4403 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4430 */
+  /* ./parser//parser.nit:4404 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4432 */
+  /* ./parser//parser.nit:4406 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4432);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4406);
   }
-  /* ./parser//parser.nit:4434 */
+  /* ./parser//parser.nit:4408 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4434);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4408);
   }
-  /* ./parser//parser.nit:4436 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4410 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4436);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4410);
   }
-  /* ./parser//parser.nit:4438 */
+  /* ./parser//parser.nit:4412 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4438);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4412);
   }
-  /* ./parser//parser.nit:4440 */
+  /* ./parser//parser.nit:4414 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4440);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4414);
   }
-  /* ./parser//parser.nit:4442 */
+  /* ./parser//parser.nit:4416 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4442);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4416);
   }
-  /* ./parser//parser.nit:4444 */
+  /* ./parser//parser.nit:4418 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4444);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4418);
   }
-  /* ./parser//parser.nit:4445 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4457 */
+  /* ./parser//parser.nit:4419 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4431 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4458 */
+  /* ./parser//parser.nit:4432 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction99____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4458);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4432);
   }
   REGB0 = ATTR_parser___ReduceAction99____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15723,7 +15674,7 @@ void parser___ReduceAction99___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos102]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4461;
+  fra.me.line = 4435;
   fra.me.meth = LOCATE_parser___ReduceAction99___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15731,7 +15682,7 @@ void parser___ReduceAction99___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4461 */
+  /* ./parser//parser.nit:4435 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction99____goto(fra.me.REG[1]) = REGB0;
@@ -15740,15 +15691,15 @@ void parser___ReduceAction99___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction100___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;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4465;
+  fra.me.line = 4439;
   fra.me.meth = LOCATE_parser___ReduceAction100___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;
@@ -15759,84 +15710,75 @@ 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:4467 */
+  /* ./parser//parser.nit:4441 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4468 */
+  /* ./parser//parser.nit:4442 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4469 */
+  /* ./parser//parser.nit:4443 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4470 */
+  /* ./parser//parser.nit:4444 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4471 */
+  /* ./parser//parser.nit:4445 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4472 */
+  /* ./parser//parser.nit:4446 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4473 */
+  /* ./parser//parser.nit:4447 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4474 */
+  /* ./parser//parser.nit:4448 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4475 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4477 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4477);
-  }
-  /* ./parser//parser.nit:4479 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4450 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4479);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4450);
   }
-  /* ./parser//parser.nit:4481 */
+  /* ./parser//parser.nit:4452 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4481);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4452);
   }
-  /* ./parser//parser.nit:4483 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4454 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4483);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4454);
   }
-  /* ./parser//parser.nit:4485 */
+  /* ./parser//parser.nit:4456 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4485);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4456);
   }
-  /* ./parser//parser.nit:4487 */
+  /* ./parser//parser.nit:4458 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4487);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4458);
   }
-  /* ./parser//parser.nit:4489 */
+  /* ./parser//parser.nit:4460 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4489);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4460);
   }
-  /* ./parser//parser.nit:4491 */
+  /* ./parser//parser.nit:4462 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4491);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4462);
   }
-  /* ./parser//parser.nit:4492 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4504 */
+  /* ./parser//parser.nit:4463 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4475 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4505 */
+  /* ./parser//parser.nit:4476 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction100____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4505);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4476);
   }
   REGB0 = ATTR_parser___ReduceAction100____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15852,7 +15794,7 @@ void parser___ReduceAction100___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos103]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4508;
+  fra.me.line = 4479;
   fra.me.meth = LOCATE_parser___ReduceAction100___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15860,7 +15802,7 @@ void parser___ReduceAction100___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4508 */
+  /* ./parser//parser.nit:4479 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction100____goto(fra.me.REG[1]) = REGB0;
@@ -15869,15 +15811,15 @@ void parser___ReduceAction100___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction101___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 = 4512;
+  fra.me.line = 4483;
   fra.me.meth = LOCATE_parser___ReduceAction101___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;
@@ -15886,63 +15828,86 @@ 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[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4514 */
+  /* ./parser//parser.nit:4485 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4515 */
+  /* ./parser//parser.nit:4486 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4516 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4517 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4518 */
+  /* ./parser//parser.nit:4487 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4519 */
+  /* ./parser//parser.nit:4488 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4520 */
+  /* ./parser//parser.nit:4489 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4521 */
+  /* ./parser//parser.nit:4490 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4523 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4491 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4492 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4493 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4495 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4495);
+  }
+  /* ./parser//parser.nit:4497 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4497);
+  }
+  /* ./parser//parser.nit:4499 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4499);
+  }
+  /* ./parser//parser.nit:4501 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4523);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4501);
   }
-  /* ./parser//parser.nit:4525 */
+  /* ./parser//parser.nit:4503 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4525);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4503);
   }
-  /* ./parser//parser.nit:4527 */
+  /* ./parser//parser.nit:4505 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4527);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4505);
   }
-  /* ./parser//parser.nit:4529 */
+  /* ./parser//parser.nit:4507 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4529);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4507);
   }
-  /* ./parser//parser.nit:4531 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:4509 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4531);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4509);
   }
-  /* ./parser//parser.nit:4532 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4544 */
+  /* ./parser//parser.nit:4510 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4522 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4545 */
+  /* ./parser//parser.nit:4523 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction101____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4545);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4523);
   }
   REGB0 = ATTR_parser___ReduceAction101____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15958,7 +15923,7 @@ void parser___ReduceAction101___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos104]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4548;
+  fra.me.line = 4526;
   fra.me.meth = LOCATE_parser___ReduceAction101___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15966,7 +15931,7 @@ void parser___ReduceAction101___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4548 */
+  /* ./parser//parser.nit:4526 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction101____goto(fra.me.REG[1]) = REGB0;
@@ -15975,15 +15940,15 @@ void parser___ReduceAction101___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction102___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 = 4552;
+  fra.me.line = 4530;
   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;
@@ -15992,72 +15957,63 @@ void parser___ReduceAction102___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:4554 */
+  /* ./parser//parser.nit:4532 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4555 */
+  /* ./parser//parser.nit:4533 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4556 */
+  /* ./parser//parser.nit:4534 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4557 */
+  /* ./parser//parser.nit:4535 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4558 */
+  /* ./parser//parser.nit:4536 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4559 */
+  /* ./parser//parser.nit:4537 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4560 */
+  /* ./parser//parser.nit:4538 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4561 */
+  /* ./parser//parser.nit:4539 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4562 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4564 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4564);
-  }
-  /* ./parser//parser.nit:4566 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4541 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4566);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4541);
   }
-  /* ./parser//parser.nit:4568 */
+  /* ./parser//parser.nit:4543 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4568);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4543);
   }
-  /* ./parser//parser.nit:4570 */
+  /* ./parser//parser.nit:4545 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4570);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4545);
   }
-  /* ./parser//parser.nit:4572 */
+  /* ./parser//parser.nit:4547 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4572);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4547);
   }
-  /* ./parser//parser.nit:4574 */
+  /* ./parser//parser.nit:4549 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4574);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4549);
   }
-  /* ./parser//parser.nit:4575 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4587 */
+  /* ./parser//parser.nit:4550 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4562 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4588 */
+  /* ./parser//parser.nit:4563 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction102____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4588);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4563);
   }
   REGB0 = ATTR_parser___ReduceAction102____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16073,7 +16029,7 @@ void parser___ReduceAction102___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos105]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4591;
+  fra.me.line = 4566;
   fra.me.meth = LOCATE_parser___ReduceAction102___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16081,7 +16037,7 @@ void parser___ReduceAction102___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4591 */
+  /* ./parser//parser.nit:4566 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction102____goto(fra.me.REG[1]) = REGB0;
@@ -16095,7 +16051,7 @@ void parser___ReduceAction103___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 = 4595;
+  fra.me.line = 4570;
   fra.me.meth = LOCATE_parser___ReduceAction103___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -16110,69 +16066,69 @@ void parser___ReduceAction103___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4597 */
+  /* ./parser//parser.nit:4572 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4598 */
+  /* ./parser//parser.nit:4573 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4599 */
+  /* ./parser//parser.nit:4574 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4600 */
+  /* ./parser//parser.nit:4575 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4601 */
+  /* ./parser//parser.nit:4576 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4602 */
+  /* ./parser//parser.nit:4577 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4603 */
+  /* ./parser//parser.nit:4578 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4604 */
+  /* ./parser//parser.nit:4579 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4605 */
+  /* ./parser//parser.nit:4580 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4607 */
+  /* ./parser//parser.nit:4582 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4607);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4582);
   }
-  /* ./parser//parser.nit:4609 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4584 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4609);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4584);
   }
-  /* ./parser//parser.nit:4611 */
+  /* ./parser//parser.nit:4586 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4611);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4586);
   }
-  /* ./parser//parser.nit:4613 */
+  /* ./parser//parser.nit:4588 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4613);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4588);
   }
-  /* ./parser//parser.nit:4615 */
+  /* ./parser//parser.nit:4590 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4615);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4590);
   }
-  /* ./parser//parser.nit:4617 */
+  /* ./parser//parser.nit:4592 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4617);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4592);
   }
-  /* ./parser//parser.nit:4618 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4630 */
+  /* ./parser//parser.nit:4593 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4605 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4631 */
+  /* ./parser//parser.nit:4606 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction103____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4631);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4606);
   }
   REGB0 = ATTR_parser___ReduceAction103____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16188,7 +16144,7 @@ void parser___ReduceAction103___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos106]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4634;
+  fra.me.line = 4609;
   fra.me.meth = LOCATE_parser___ReduceAction103___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16196,7 +16152,7 @@ void parser___ReduceAction103___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4634 */
+  /* ./parser//parser.nit:4609 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction103____goto(fra.me.REG[1]) = REGB0;
@@ -16205,15 +16161,15 @@ void parser___ReduceAction103___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction104___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 = 4638;
+  fra.me.line = 4613;
   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;
@@ -16223,80 +16179,71 @@ void parser___ReduceAction104___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:4640 */
+  /* ./parser//parser.nit:4615 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4641 */
+  /* ./parser//parser.nit:4616 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4642 */
+  /* ./parser//parser.nit:4617 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4643 */
+  /* ./parser//parser.nit:4618 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4644 */
+  /* ./parser//parser.nit:4619 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4645 */
+  /* ./parser//parser.nit:4620 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4646 */
+  /* ./parser//parser.nit:4621 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4647 */
+  /* ./parser//parser.nit:4622 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4648 */
+  /* ./parser//parser.nit:4623 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4649 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4651 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4651);
-  }
-  /* ./parser//parser.nit:4653 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4625 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4653);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4625);
   }
-  /* ./parser//parser.nit:4655 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4627 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4655);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4627);
   }
-  /* ./parser//parser.nit:4657 */
+  /* ./parser//parser.nit:4629 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4657);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4629);
   }
-  /* ./parser//parser.nit:4659 */
+  /* ./parser//parser.nit:4631 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4631);
   }
-  /* ./parser//parser.nit:4661 */
+  /* ./parser//parser.nit:4633 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4661);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4633);
   }
-  /* ./parser//parser.nit:4663 */
+  /* ./parser//parser.nit:4635 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4663);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4635);
   }
-  /* ./parser//parser.nit:4664 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4676 */
+  /* ./parser//parser.nit:4636 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4648 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4677 */
+  /* ./parser//parser.nit:4649 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction104____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4677);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4649);
   }
   REGB0 = ATTR_parser___ReduceAction104____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16312,7 +16259,7 @@ void parser___ReduceAction104___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos107]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4680;
+  fra.me.line = 4652;
   fra.me.meth = LOCATE_parser___ReduceAction104___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16320,7 +16267,7 @@ void parser___ReduceAction104___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4680 */
+  /* ./parser//parser.nit:4652 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction104____goto(fra.me.REG[1]) = REGB0;
@@ -16329,15 +16276,15 @@ void parser___ReduceAction104___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction105___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 = 4684;
+  fra.me.line = 4656;
   fra.me.meth = LOCATE_parser___ReduceAction105___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;
@@ -16347,71 +16294,80 @@ void parser___ReduceAction105___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:4686 */
+  /* ./parser//parser.nit:4658 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4687 */
+  /* ./parser//parser.nit:4659 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4688 */
+  /* ./parser//parser.nit:4660 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4689 */
+  /* ./parser//parser.nit:4661 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4690 */
+  /* ./parser//parser.nit:4662 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4691 */
+  /* ./parser//parser.nit:4663 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4692 */
+  /* ./parser//parser.nit:4664 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4693 */
+  /* ./parser//parser.nit:4665 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4694 */
+  /* ./parser//parser.nit:4666 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4696 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4667 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4669 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4696);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4669);
   }
-  /* ./parser//parser.nit:4698 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4671 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4671);
+  }
+  /* ./parser//parser.nit:4673 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4698);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4673);
   }
-  /* ./parser//parser.nit:4700 */
+  /* ./parser//parser.nit:4675 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4700);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4675);
   }
-  /* ./parser//parser.nit:4702 */
+  /* ./parser//parser.nit:4677 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4702);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4677);
   }
-  /* ./parser//parser.nit:4704 */
+  /* ./parser//parser.nit:4679 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4704);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4679);
   }
-  /* ./parser//parser.nit:4706 */
+  /* ./parser//parser.nit:4681 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4706);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4681);
   }
-  /* ./parser//parser.nit:4707 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4719 */
+  /* ./parser//parser.nit:4682 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4694 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4720 */
+  /* ./parser//parser.nit:4695 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction105____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4720);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4695);
   }
   REGB0 = ATTR_parser___ReduceAction105____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16427,7 +16383,7 @@ void parser___ReduceAction105___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos108]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4723;
+  fra.me.line = 4698;
   fra.me.meth = LOCATE_parser___ReduceAction105___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16435,7 +16391,7 @@ void parser___ReduceAction105___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4723 */
+  /* ./parser//parser.nit:4698 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction105____goto(fra.me.REG[1]) = REGB0;
@@ -16444,15 +16400,15 @@ void parser___ReduceAction105___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction106___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 = 4727;
+  fra.me.line = 4702;
   fra.me.meth = LOCATE_parser___ReduceAction106___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;
@@ -16462,80 +16418,71 @@ void parser___ReduceAction106___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:4729 */
+  /* ./parser//parser.nit:4704 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4730 */
+  /* ./parser//parser.nit:4705 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4731 */
+  /* ./parser//parser.nit:4706 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4732 */
+  /* ./parser//parser.nit:4707 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4733 */
+  /* ./parser//parser.nit:4708 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4734 */
+  /* ./parser//parser.nit:4709 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4735 */
+  /* ./parser//parser.nit:4710 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4736 */
+  /* ./parser//parser.nit:4711 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4737 */
+  /* ./parser//parser.nit:4712 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4738 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4740 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4740);
-  }
-  /* ./parser//parser.nit:4742 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4714 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4742);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4714);
   }
-  /* ./parser//parser.nit:4744 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4716 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4744);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4716);
   }
-  /* ./parser//parser.nit:4746 */
+  /* ./parser//parser.nit:4718 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4746);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4718);
   }
-  /* ./parser//parser.nit:4748 */
+  /* ./parser//parser.nit:4720 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4748);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4720);
   }
-  /* ./parser//parser.nit:4750 */
+  /* ./parser//parser.nit:4722 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4750);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4722);
   }
-  /* ./parser//parser.nit:4752 */
+  /* ./parser//parser.nit:4724 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4752);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4724);
   }
-  /* ./parser//parser.nit:4753 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4765 */
+  /* ./parser//parser.nit:4725 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4737 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4766 */
+  /* ./parser//parser.nit:4738 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction106____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4766);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4738);
   }
   REGB0 = ATTR_parser___ReduceAction106____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16551,7 +16498,7 @@ void parser___ReduceAction106___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos109]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4769;
+  fra.me.line = 4741;
   fra.me.meth = LOCATE_parser___ReduceAction106___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16559,7 +16506,7 @@ void parser___ReduceAction106___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4769 */
+  /* ./parser//parser.nit:4741 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction106____goto(fra.me.REG[1]) = REGB0;
@@ -16573,7 +16520,7 @@ void parser___ReduceAction107___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 = 4773;
+  fra.me.line = 4745;
   fra.me.meth = LOCATE_parser___ReduceAction107___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -16589,77 +16536,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:4775 */
+  /* ./parser//parser.nit:4747 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4776 */
+  /* ./parser//parser.nit:4748 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4777 */
+  /* ./parser//parser.nit:4749 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4778 */
+  /* ./parser//parser.nit:4750 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4779 */
+  /* ./parser//parser.nit:4751 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4780 */
+  /* ./parser//parser.nit:4752 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4781 */
+  /* ./parser//parser.nit:4753 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4782 */
+  /* ./parser//parser.nit:4754 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4783 */
+  /* ./parser//parser.nit:4755 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4784 */
+  /* ./parser//parser.nit:4756 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4786 */
+  /* ./parser//parser.nit:4758 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4786);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4758);
   }
-  /* ./parser//parser.nit:4788 */
+  /* ./parser//parser.nit:4760 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4788);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4760);
   }
-  /* ./parser//parser.nit:4790 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4762 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4790);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4762);
   }
-  /* ./parser//parser.nit:4792 */
+  /* ./parser//parser.nit:4764 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4792);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4764);
   }
-  /* ./parser//parser.nit:4794 */
+  /* ./parser//parser.nit:4766 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4794);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4766);
   }
-  /* ./parser//parser.nit:4796 */
+  /* ./parser//parser.nit:4768 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4796);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4768);
   }
-  /* ./parser//parser.nit:4798 */
+  /* ./parser//parser.nit:4770 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4798);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4770);
   }
-  /* ./parser//parser.nit:4799 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4811 */
+  /* ./parser//parser.nit:4771 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4783 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4812 */
+  /* ./parser//parser.nit:4784 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction107____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4812);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4784);
   }
   REGB0 = ATTR_parser___ReduceAction107____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16675,7 +16622,7 @@ void parser___ReduceAction107___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos110]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4815;
+  fra.me.line = 4787;
   fra.me.meth = LOCATE_parser___ReduceAction107___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16683,7 +16630,7 @@ void parser___ReduceAction107___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4815 */
+  /* ./parser//parser.nit:4787 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction107____goto(fra.me.REG[1]) = REGB0;
@@ -16692,15 +16639,15 @@ void parser___ReduceAction107___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction108___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;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4819;
+  fra.me.line = 4791;
   fra.me.meth = LOCATE_parser___ReduceAction108___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;
@@ -16711,88 +16658,79 @@ void parser___ReduceAction108___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:4821 */
+  /* ./parser//parser.nit:4793 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4822 */
+  /* ./parser//parser.nit:4794 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4823 */
+  /* ./parser//parser.nit:4795 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4824 */
+  /* ./parser//parser.nit:4796 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4825 */
+  /* ./parser//parser.nit:4797 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4826 */
+  /* ./parser//parser.nit:4798 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4827 */
+  /* ./parser//parser.nit:4799 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4828 */
+  /* ./parser//parser.nit:4800 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4829 */
+  /* ./parser//parser.nit:4801 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4830 */
+  /* ./parser//parser.nit:4802 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4831 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4833 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4833);
-  }
-  /* ./parser//parser.nit:4835 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4804 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4835);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4804);
   }
-  /* ./parser//parser.nit:4837 */
+  /* ./parser//parser.nit:4806 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4837);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4806);
   }
-  /* ./parser//parser.nit:4839 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4808 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4839);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4808);
   }
-  /* ./parser//parser.nit:4841 */
+  /* ./parser//parser.nit:4810 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4841);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4810);
   }
-  /* ./parser//parser.nit:4843 */
+  /* ./parser//parser.nit:4812 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4843);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4812);
   }
-  /* ./parser//parser.nit:4845 */
+  /* ./parser//parser.nit:4814 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4845);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4814);
   }
-  /* ./parser//parser.nit:4847 */
+  /* ./parser//parser.nit:4816 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4847);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4816);
   }
-  /* ./parser//parser.nit:4848 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4860 */
+  /* ./parser//parser.nit:4817 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4829 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4861 */
+  /* ./parser//parser.nit:4830 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction108____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4861);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4830);
   }
   REGB0 = ATTR_parser___ReduceAction108____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16808,7 +16746,7 @@ void parser___ReduceAction108___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos111]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4864;
+  fra.me.line = 4833;
   fra.me.meth = LOCATE_parser___ReduceAction108___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16816,7 +16754,7 @@ void parser___ReduceAction108___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4864 */
+  /* ./parser//parser.nit:4833 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction108____goto(fra.me.REG[1]) = REGB0;
@@ -16825,15 +16763,15 @@ void parser___ReduceAction108___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction109___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 = 4868;
+  fra.me.line = 4837;
   fra.me.meth = LOCATE_parser___ReduceAction109___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;
@@ -16843,71 +16781,89 @@ void parser___ReduceAction109___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:4870 */
+  /* ./parser//parser.nit:4839 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4871 */
+  /* ./parser//parser.nit:4840 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4872 */
+  /* ./parser//parser.nit:4841 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4873 */
+  /* ./parser//parser.nit:4842 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4874 */
+  /* ./parser//parser.nit:4843 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4875 */
+  /* ./parser//parser.nit:4844 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4876 */
+  /* ./parser//parser.nit:4845 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4877 */
+  /* ./parser//parser.nit:4846 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4878 */
+  /* ./parser//parser.nit:4847 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4880 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4848 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4849 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4851 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4880);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4851);
   }
-  /* ./parser//parser.nit:4882 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:4853 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4882);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4853);
   }
-  /* ./parser//parser.nit:4884 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:4855 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4884);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4855);
   }
-  /* ./parser//parser.nit:4886 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:4857 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4886);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4857);
   }
-  /* ./parser//parser.nit:4888 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:4859 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4888);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4859);
   }
-  /* ./parser//parser.nit:4890 */
+  /* ./parser//parser.nit:4861 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4861);
+  }
+  /* ./parser//parser.nit:4863 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4863);
+  }
+  /* ./parser//parser.nit:4865 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4890);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4865);
   }
-  /* ./parser//parser.nit:4891 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4903 */
+  /* ./parser//parser.nit:4866 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4878 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4904 */
+  /* ./parser//parser.nit:4879 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction109____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4904);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4879);
   }
   REGB0 = ATTR_parser___ReduceAction109____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16923,7 +16879,7 @@ void parser___ReduceAction109___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos112]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4907;
+  fra.me.line = 4882;
   fra.me.meth = LOCATE_parser___ReduceAction109___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16931,7 +16887,7 @@ void parser___ReduceAction109___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4907 */
+  /* ./parser//parser.nit:4882 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction109____goto(fra.me.REG[1]) = REGB0;
@@ -16940,15 +16896,15 @@ void parser___ReduceAction109___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction110___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 = 4911;
+  fra.me.line = 4886;
   fra.me.meth = LOCATE_parser___ReduceAction110___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;
@@ -16958,80 +16914,71 @@ 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[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4913 */
+  /* ./parser//parser.nit:4888 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4914 */
+  /* ./parser//parser.nit:4889 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4915 */
+  /* ./parser//parser.nit:4890 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4916 */
+  /* ./parser//parser.nit:4891 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4917 */
+  /* ./parser//parser.nit:4892 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4918 */
+  /* ./parser//parser.nit:4893 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4919 */
+  /* ./parser//parser.nit:4894 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4920 */
+  /* ./parser//parser.nit:4895 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4921 */
+  /* ./parser//parser.nit:4896 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4922 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4924 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4924);
-  }
-  /* ./parser//parser.nit:4926 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4898 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4926);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4898);
   }
-  /* ./parser//parser.nit:4928 */
+  /* ./parser//parser.nit:4900 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4928);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4900);
   }
-  /* ./parser//parser.nit:4930 */
+  /* ./parser//parser.nit:4902 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4930);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4902);
   }
-  /* ./parser//parser.nit:4932 */
+  /* ./parser//parser.nit:4904 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4932);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4904);
   }
-  /* ./parser//parser.nit:4934 */
+  /* ./parser//parser.nit:4906 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4934);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4906);
   }
-  /* ./parser//parser.nit:4936 */
+  /* ./parser//parser.nit:4908 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4936);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4908);
   }
-  /* ./parser//parser.nit:4937 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4949 */
+  /* ./parser//parser.nit:4909 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:4921 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4950 */
+  /* ./parser//parser.nit:4922 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction110____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4950);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4922);
   }
   REGB0 = ATTR_parser___ReduceAction110____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17047,7 +16994,7 @@ void parser___ReduceAction110___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos113]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4953;
+  fra.me.line = 4925;
   fra.me.meth = LOCATE_parser___ReduceAction110___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17055,7 +17002,7 @@ void parser___ReduceAction110___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4953 */
+  /* ./parser//parser.nit:4925 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction110____goto(fra.me.REG[1]) = REGB0;
@@ -17069,7 +17016,7 @@ void parser___ReduceAction111___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 = 4957;
+  fra.me.line = 4929;
   fra.me.meth = LOCATE_parser___ReduceAction111___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -17085,77 +17032,77 @@ void parser___ReduceAction111___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4959 */
+  /* ./parser//parser.nit:4931 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4960 */
+  /* ./parser//parser.nit:4932 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4961 */
+  /* ./parser//parser.nit:4933 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4962 */
+  /* ./parser//parser.nit:4934 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4963 */
+  /* ./parser//parser.nit:4935 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4964 */
+  /* ./parser//parser.nit:4936 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4965 */
+  /* ./parser//parser.nit:4937 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4966 */
+  /* ./parser//parser.nit:4938 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4967 */
+  /* ./parser//parser.nit:4939 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4968 */
+  /* ./parser//parser.nit:4940 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4970 */
+  /* ./parser//parser.nit:4942 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4970);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4942);
   }
-  /* ./parser//parser.nit:4972 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4944 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4972);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4944);
   }
-  /* ./parser//parser.nit:4974 */
+  /* ./parser//parser.nit:4946 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4974);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4946);
   }
-  /* ./parser//parser.nit:4976 */
+  /* ./parser//parser.nit:4948 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4976);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4948);
   }
-  /* ./parser//parser.nit:4978 */
+  /* ./parser//parser.nit:4950 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4978);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4950);
   }
-  /* ./parser//parser.nit:4980 */
+  /* ./parser//parser.nit:4952 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4980);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4952);
   }
-  /* ./parser//parser.nit:4982 */
+  /* ./parser//parser.nit:4954 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4982);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4954);
   }
-  /* ./parser//parser.nit:4983 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4995 */
+  /* ./parser//parser.nit:4955 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:4967 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4996 */
+  /* ./parser//parser.nit:4968 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction111____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4996);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4968);
   }
   REGB0 = ATTR_parser___ReduceAction111____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17171,7 +17118,7 @@ void parser___ReduceAction111___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos114]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4999;
+  fra.me.line = 4971;
   fra.me.meth = LOCATE_parser___ReduceAction111___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17179,7 +17126,7 @@ void parser___ReduceAction111___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:4999 */
+  /* ./parser//parser.nit:4971 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction111____goto(fra.me.REG[1]) = REGB0;
@@ -17188,15 +17135,15 @@ void parser___ReduceAction111___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction112___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;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5003;
+  fra.me.line = 4975;
   fra.me.meth = LOCATE_parser___ReduceAction112___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;
@@ -17207,88 +17154,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[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5005 */
+  /* ./parser//parser.nit:4977 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5006 */
+  /* ./parser//parser.nit:4978 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5007 */
+  /* ./parser//parser.nit:4979 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5008 */
+  /* ./parser//parser.nit:4980 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5009 */
+  /* ./parser//parser.nit:4981 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5010 */
+  /* ./parser//parser.nit:4982 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5011 */
+  /* ./parser//parser.nit:4983 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5012 */
+  /* ./parser//parser.nit:4984 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5013 */
+  /* ./parser//parser.nit:4985 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5014 */
+  /* ./parser//parser.nit:4986 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5015 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5017 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5017);
-  }
-  /* ./parser//parser.nit:5019 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4988 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5019);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4988);
   }
-  /* ./parser//parser.nit:5021 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4990 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5021);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4990);
   }
-  /* ./parser//parser.nit:5023 */
+  /* ./parser//parser.nit:4992 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5023);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4992);
   }
-  /* ./parser//parser.nit:5025 */
+  /* ./parser//parser.nit:4994 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5025);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4994);
   }
-  /* ./parser//parser.nit:5027 */
+  /* ./parser//parser.nit:4996 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5027);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4996);
   }
-  /* ./parser//parser.nit:5029 */
+  /* ./parser//parser.nit:4998 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5029);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4998);
   }
-  /* ./parser//parser.nit:5031 */
+  /* ./parser//parser.nit:5000 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5031);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5000);
   }
-  /* ./parser//parser.nit:5032 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5044 */
+  /* ./parser//parser.nit:5001 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5013 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5045 */
+  /* ./parser//parser.nit:5014 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction112____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5045);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5014);
   }
   REGB0 = ATTR_parser___ReduceAction112____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17304,7 +17242,7 @@ void parser___ReduceAction112___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos115]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5048;
+  fra.me.line = 5017;
   fra.me.meth = LOCATE_parser___ReduceAction112___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17312,7 +17250,7 @@ void parser___ReduceAction112___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5048 */
+  /* ./parser//parser.nit:5017 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction112____goto(fra.me.REG[1]) = REGB0;
@@ -17321,15 +17259,15 @@ void parser___ReduceAction112___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction113___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5052;
+  fra.me.line = 5021;
   fra.me.meth = LOCATE_parser___ReduceAction113___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;
@@ -17340,79 +17278,88 @@ void parser___ReduceAction113___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:5054 */
+  /* ./parser//parser.nit:5023 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5055 */
+  /* ./parser//parser.nit:5024 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5056 */
+  /* ./parser//parser.nit:5025 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5057 */
+  /* ./parser//parser.nit:5026 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5058 */
+  /* ./parser//parser.nit:5027 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5059 */
+  /* ./parser//parser.nit:5028 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5060 */
+  /* ./parser//parser.nit:5029 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5061 */
+  /* ./parser//parser.nit:5030 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5062 */
+  /* ./parser//parser.nit:5031 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5063 */
+  /* ./parser//parser.nit:5032 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5065 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5033 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5035 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5065);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5035);
   }
-  /* ./parser//parser.nit:5067 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:5037 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5067);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5037);
   }
-  /* ./parser//parser.nit:5069 */
+  /* ./parser//parser.nit:5039 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5039);
+  }
+  /* ./parser//parser.nit:5041 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5069);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5041);
   }
-  /* ./parser//parser.nit:5071 */
+  /* ./parser//parser.nit:5043 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5071);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5043);
   }
-  /* ./parser//parser.nit:5073 */
+  /* ./parser//parser.nit:5045 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5073);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5045);
   }
-  /* ./parser//parser.nit:5075 */
+  /* ./parser//parser.nit:5047 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5075);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5047);
   }
-  /* ./parser//parser.nit:5077 */
+  /* ./parser//parser.nit:5049 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5077);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5049);
   }
-  /* ./parser//parser.nit:5078 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5090 */
+  /* ./parser//parser.nit:5050 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5062 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5091 */
+  /* ./parser//parser.nit:5063 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction113____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, 5063);
   }
   REGB0 = ATTR_parser___ReduceAction113____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17428,7 +17375,7 @@ void parser___ReduceAction113___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos116]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5094;
+  fra.me.line = 5066;
   fra.me.meth = LOCATE_parser___ReduceAction113___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17436,7 +17383,7 @@ void parser___ReduceAction113___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5094 */
+  /* ./parser//parser.nit:5066 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction113____goto(fra.me.REG[1]) = REGB0;
@@ -17445,15 +17392,15 @@ void parser___ReduceAction113___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction114___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;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5098;
+  fra.me.line = 5070;
   fra.me.meth = LOCATE_parser___ReduceAction114___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;
@@ -17464,88 +17411,79 @@ void parser___ReduceAction114___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:5100 */
+  /* ./parser//parser.nit:5072 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5101 */
+  /* ./parser//parser.nit:5073 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5102 */
+  /* ./parser//parser.nit:5074 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5103 */
+  /* ./parser//parser.nit:5075 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5104 */
+  /* ./parser//parser.nit:5076 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5105 */
+  /* ./parser//parser.nit:5077 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5106 */
+  /* ./parser//parser.nit:5078 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5107 */
+  /* ./parser//parser.nit:5079 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5108 */
+  /* ./parser//parser.nit:5080 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5109 */
+  /* ./parser//parser.nit:5081 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5110 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5112 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5112);
-  }
-  /* ./parser//parser.nit:5114 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:5083 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5114);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5083);
   }
-  /* ./parser//parser.nit:5116 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5085 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5116);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5085);
   }
-  /* ./parser//parser.nit:5118 */
+  /* ./parser//parser.nit:5087 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5118);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5087);
   }
-  /* ./parser//parser.nit:5120 */
+  /* ./parser//parser.nit:5089 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5120);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5089);
   }
-  /* ./parser//parser.nit:5122 */
+  /* ./parser//parser.nit:5091 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5122);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5091);
   }
-  /* ./parser//parser.nit:5124 */
+  /* ./parser//parser.nit:5093 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5124);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5093);
   }
-  /* ./parser//parser.nit:5126 */
+  /* ./parser//parser.nit:5095 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5126);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5095);
   }
-  /* ./parser//parser.nit:5127 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5139 */
+  /* ./parser//parser.nit:5096 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5108 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5140 */
+  /* ./parser//parser.nit:5109 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction114____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5140);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5109);
   }
   REGB0 = ATTR_parser___ReduceAction114____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17561,7 +17499,7 @@ void parser___ReduceAction114___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos117]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5143;
+  fra.me.line = 5112;
   fra.me.meth = LOCATE_parser___ReduceAction114___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17569,7 +17507,7 @@ void parser___ReduceAction114___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5143 */
+  /* ./parser//parser.nit:5112 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction114____goto(fra.me.REG[1]) = REGB0;
@@ -17583,7 +17521,7 @@ void parser___ReduceAction115___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 = 5147;
+  fra.me.line = 5116;
   fra.me.meth = LOCATE_parser___ReduceAction115___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -17600,85 +17538,85 @@ void parser___ReduceAction115___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5149 */
+  /* ./parser//parser.nit:5118 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5150 */
+  /* ./parser//parser.nit:5119 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5151 */
+  /* ./parser//parser.nit:5120 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5152 */
+  /* ./parser//parser.nit:5121 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5153 */
+  /* ./parser//parser.nit:5122 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5154 */
+  /* ./parser//parser.nit:5123 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5155 */
+  /* ./parser//parser.nit:5124 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5156 */
+  /* ./parser//parser.nit:5125 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5157 */
+  /* ./parser//parser.nit:5126 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5158 */
+  /* ./parser//parser.nit:5127 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5159 */
+  /* ./parser//parser.nit:5128 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5161 */
+  /* ./parser//parser.nit:5130 */
   REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5161);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5130);
   }
-  /* ./parser//parser.nit:5163 */
+  /* ./parser//parser.nit:5132 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5163);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5132);
   }
-  /* ./parser//parser.nit:5165 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:5134 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5165);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5134);
   }
-  /* ./parser//parser.nit:5167 */
+  /* ./parser//parser.nit:5136 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5167);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5136);
   }
-  /* ./parser//parser.nit:5169 */
+  /* ./parser//parser.nit:5138 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5169);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5138);
   }
-  /* ./parser//parser.nit:5171 */
+  /* ./parser//parser.nit:5140 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5171);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5140);
   }
-  /* ./parser//parser.nit:5173 */
+  /* ./parser//parser.nit:5142 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5173);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5142);
   }
-  /* ./parser//parser.nit:5175 */
+  /* ./parser//parser.nit:5144 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5175);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5144);
   }
-  /* ./parser//parser.nit:5176 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5188 */
+  /* ./parser//parser.nit:5145 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5157 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5189 */
+  /* ./parser//parser.nit:5158 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction115____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5189);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5158);
   }
   REGB0 = ATTR_parser___ReduceAction115____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17694,7 +17632,7 @@ void parser___ReduceAction115___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos118]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5192;
+  fra.me.line = 5161;
   fra.me.meth = LOCATE_parser___ReduceAction115___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17702,7 +17640,7 @@ void parser___ReduceAction115___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5192 */
+  /* ./parser//parser.nit:5161 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction115____goto(fra.me.REG[1]) = REGB0;
@@ -17711,15 +17649,15 @@ void parser___ReduceAction115___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction116___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[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 = 5196;
+  fra.me.line = 5165;
   fra.me.meth = LOCATE_parser___ReduceAction116___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17731,96 +17669,87 @@ void parser___ReduceAction116___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5198 */
+  /* ./parser//parser.nit:5167 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5199 */
+  /* ./parser//parser.nit:5168 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5200 */
+  /* ./parser//parser.nit:5169 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5201 */
+  /* ./parser//parser.nit:5170 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5202 */
+  /* ./parser//parser.nit:5171 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5203 */
+  /* ./parser//parser.nit:5172 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5204 */
+  /* ./parser//parser.nit:5173 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5205 */
+  /* ./parser//parser.nit:5174 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5206 */
+  /* ./parser//parser.nit:5175 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5207 */
+  /* ./parser//parser.nit:5176 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5208 */
+  /* ./parser//parser.nit:5177 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5209 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5211 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5211);
-  }
-  /* ./parser//parser.nit:5213 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:5179 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5213);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5179);
   }
-  /* ./parser//parser.nit:5215 */
+  /* ./parser//parser.nit:5181 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5181);
   }
-  /* ./parser//parser.nit:5217 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5183 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5183);
   }
-  /* ./parser//parser.nit:5219 */
+  /* ./parser//parser.nit:5185 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5219);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5185);
   }
-  /* ./parser//parser.nit:5221 */
+  /* ./parser//parser.nit:5187 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5221);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5187);
   }
-  /* ./parser//parser.nit:5223 */
+  /* ./parser//parser.nit:5189 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5223);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5189);
   }
-  /* ./parser//parser.nit:5225 */
+  /* ./parser//parser.nit:5191 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5225);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5191);
   }
-  /* ./parser//parser.nit:5227 */
+  /* ./parser//parser.nit:5193 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5227);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5193);
   }
-  /* ./parser//parser.nit:5228 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5240 */
+  /* ./parser//parser.nit:5194 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5206 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5241 */
+  /* ./parser//parser.nit:5207 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction116____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5241);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5207);
   }
   REGB0 = ATTR_parser___ReduceAction116____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17836,7 +17765,7 @@ void parser___ReduceAction116___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos119]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5244;
+  fra.me.line = 5210;
   fra.me.meth = LOCATE_parser___ReduceAction116___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17844,7 +17773,7 @@ void parser___ReduceAction116___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5244 */
+  /* ./parser//parser.nit:5210 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction116____goto(fra.me.REG[1]) = REGB0;
@@ -17853,15 +17782,15 @@ void parser___ReduceAction116___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction117___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[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 = 5248;
+  fra.me.line = 5214;
   fra.me.meth = LOCATE_parser___ReduceAction117___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 12;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17869,51 +17798,100 @@ void parser___ReduceAction117___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[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5250 */
+  /* ./parser//parser.nit:5216 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5251 */
+  /* ./parser//parser.nit:5217 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5252 */
+  /* ./parser//parser.nit:5218 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5219 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5220 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5253 */
+  /* ./parser//parser.nit:5221 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5254 */
+  /* ./parser//parser.nit:5222 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5256 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5223 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5224 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5225 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5226 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5227 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5229 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5256);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5229);
   }
-  /* ./parser//parser.nit:5258 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5231 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5258);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5231);
   }
-  /* ./parser//parser.nit:5260 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5233 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5260);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5233);
   }
-  /* ./parser//parser.nit:5262 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5235 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5262);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5235);
   }
-  /* ./parser//parser.nit:5263 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:5275 */
+  /* ./parser//parser.nit:5237 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5237);
+  }
+  /* ./parser//parser.nit:5239 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5239);
+  }
+  /* ./parser//parser.nit:5241 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5241);
+  }
+  /* ./parser//parser.nit:5243 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5243);
+  }
+  /* ./parser//parser.nit:5245 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5245);
+  }
+  /* ./parser//parser.nit:5246 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5258 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5276 */
+  /* ./parser//parser.nit:5259 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction117____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5276);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5259);
   }
   REGB0 = ATTR_parser___ReduceAction117____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17929,7 +17907,7 @@ void parser___ReduceAction117___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos120]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5279;
+  fra.me.line = 5262;
   fra.me.meth = LOCATE_parser___ReduceAction117___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17937,7 +17915,7 @@ void parser___ReduceAction117___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5279 */
+  /* ./parser//parser.nit:5262 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction117____goto(fra.me.REG[1]) = REGB0;
@@ -17946,15 +17924,15 @@ void parser___ReduceAction117___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction118___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[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 = 5283;
+  fra.me.line = 5266;
   fra.me.meth = LOCATE_parser___ReduceAction118___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;
@@ -17962,60 +17940,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[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5285 */
+  /* ./parser//parser.nit:5268 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5286 */
+  /* ./parser//parser.nit:5269 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5287 */
+  /* ./parser//parser.nit:5270 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5288 */
+  /* ./parser//parser.nit:5271 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5289 */
+  /* ./parser//parser.nit:5272 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5290 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5292 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5292);
-  }
-  /* ./parser//parser.nit:5294 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5274 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5294);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5274);
   }
-  /* ./parser//parser.nit:5296 */
+  /* ./parser//parser.nit:5276 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5296);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5276);
   }
-  /* ./parser//parser.nit:5298 */
+  /* ./parser//parser.nit:5278 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5298);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5278);
   }
-  /* ./parser//parser.nit:5300 */
+  /* ./parser//parser.nit:5280 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5300);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5280);
   }
-  /* ./parser//parser.nit:5301 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:5313 */
+  /* ./parser//parser.nit:5281 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:5293 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5314 */
+  /* ./parser//parser.nit:5294 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction118____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5314);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5294);
   }
   REGB0 = ATTR_parser___ReduceAction118____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18031,7 +18000,7 @@ void parser___ReduceAction118___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos121]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5317;
+  fra.me.line = 5297;
   fra.me.meth = LOCATE_parser___ReduceAction118___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18039,7 +18008,7 @@ void parser___ReduceAction118___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5317 */
+  /* ./parser//parser.nit:5297 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction118____goto(fra.me.REG[1]) = REGB0;
@@ -18053,7 +18022,7 @@ void parser___ReduceAction119___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 = 5321;
+  fra.me.line = 5301;
   fra.me.meth = LOCATE_parser___ReduceAction119___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -18067,57 +18036,57 @@ void parser___ReduceAction119___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5323 */
+  /* ./parser//parser.nit:5303 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5324 */
+  /* ./parser//parser.nit:5304 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5325 */
+  /* ./parser//parser.nit:5305 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5326 */
+  /* ./parser//parser.nit:5306 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5327 */
+  /* ./parser//parser.nit:5307 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5328 */
+  /* ./parser//parser.nit:5308 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5330 */
+  /* ./parser//parser.nit:5310 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5330);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5310);
   }
-  /* ./parser//parser.nit:5332 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5312 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5332);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5312);
   }
-  /* ./parser//parser.nit:5334 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5314 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5334);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5314);
   }
-  /* ./parser//parser.nit:5336 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5316 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5336);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5316);
   }
-  /* ./parser//parser.nit:5338 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:5318 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5338);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5318);
   }
-  /* ./parser//parser.nit:5339 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:5351 */
+  /* ./parser//parser.nit:5319 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:5331 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5352 */
+  /* ./parser//parser.nit:5332 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction119____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5352);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5332);
   }
   REGB0 = ATTR_parser___ReduceAction119____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18133,7 +18102,7 @@ void parser___ReduceAction119___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos122]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5355;
+  fra.me.line = 5335;
   fra.me.meth = LOCATE_parser___ReduceAction119___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18141,7 +18110,7 @@ void parser___ReduceAction119___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5355 */
+  /* ./parser//parser.nit:5335 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction119____goto(fra.me.REG[1]) = REGB0;
@@ -18150,15 +18119,15 @@ void parser___ReduceAction119___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction120___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 = 5359;
+  fra.me.line = 5339;
   fra.me.meth = LOCATE_parser___ReduceAction120___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;
@@ -18167,68 +18136,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[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5361 */
+  /* ./parser//parser.nit:5341 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5362 */
+  /* ./parser//parser.nit:5342 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5363 */
+  /* ./parser//parser.nit:5343 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5364 */
+  /* ./parser//parser.nit:5344 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5365 */
+  /* ./parser//parser.nit:5345 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5366 */
+  /* ./parser//parser.nit:5346 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5367 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5369 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5369);
-  }
-  /* ./parser//parser.nit:5371 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5348 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5371);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5348);
   }
-  /* ./parser//parser.nit:5373 */
+  /* ./parser//parser.nit:5350 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5373);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5350);
   }
-  /* ./parser//parser.nit:5375 */
+  /* ./parser//parser.nit:5352 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5375);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5352);
   }
-  /* ./parser//parser.nit:5377 */
+  /* ./parser//parser.nit:5354 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5377);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5354);
   }
-  /* ./parser//parser.nit:5379 */
+  /* ./parser//parser.nit:5356 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5379);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5356);
   }
-  /* ./parser//parser.nit:5380 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:5392 */
+  /* ./parser//parser.nit:5357 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:5369 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5393 */
+  /* ./parser//parser.nit:5370 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction120____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5393);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5370);
   }
   REGB0 = ATTR_parser___ReduceAction120____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18244,7 +18204,7 @@ void parser___ReduceAction120___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos123]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5396;
+  fra.me.line = 5373;
   fra.me.meth = LOCATE_parser___ReduceAction120___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18252,7 +18212,7 @@ void parser___ReduceAction120___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5396 */
+  /* ./parser//parser.nit:5373 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction120____goto(fra.me.REG[1]) = REGB0;
@@ -18261,15 +18221,15 @@ void parser___ReduceAction120___init(val_t p0, val_t p1, int* init_table){
   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 = 5400;
+  fra.me.line = 5377;
   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;
@@ -18278,59 +18238,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:5402 */
+  /* ./parser//parser.nit:5379 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5403 */
+  /* ./parser//parser.nit:5380 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5404 */
+  /* ./parser//parser.nit:5381 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5405 */
+  /* ./parser//parser.nit:5382 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5406 */
+  /* ./parser//parser.nit:5383 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5407 */
+  /* ./parser//parser.nit:5384 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5409 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5385 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5387 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5409);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5387);
   }
-  /* ./parser//parser.nit:5411 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:5389 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5411);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5389);
   }
-  /* ./parser//parser.nit:5413 */
+  /* ./parser//parser.nit:5391 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5413);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5391);
   }
-  /* ./parser//parser.nit:5415 */
+  /* ./parser//parser.nit:5393 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5415);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5393);
   }
-  /* ./parser//parser.nit:5417 */
+  /* ./parser//parser.nit:5395 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5417);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5395);
   }
-  /* ./parser//parser.nit:5418 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:5430 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5431 */
+  /* ./parser//parser.nit:5397 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5397);
+  }
+  /* ./parser//parser.nit:5398 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:5410 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5411 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction121____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5431);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5411);
   }
   REGB0 = ATTR_parser___ReduceAction121____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18346,7 +18315,7 @@ void parser___ReduceAction121___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos124]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5434;
+  fra.me.line = 5414;
   fra.me.meth = LOCATE_parser___ReduceAction121___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18354,7 +18323,7 @@ void parser___ReduceAction121___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5434 */
+  /* ./parser//parser.nit:5414 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction121____goto(fra.me.REG[1]) = REGB0;
@@ -18363,15 +18332,15 @@ void parser___ReduceAction121___init(val_t p0, val_t p1, int* init_table){
   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 = 5438;
+  fra.me.line = 5418;
   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;
@@ -18380,68 +18349,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:5440 */
+  /* ./parser//parser.nit:5420 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5441 */
+  /* ./parser//parser.nit:5421 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5442 */
+  /* ./parser//parser.nit:5422 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5443 */
+  /* ./parser//parser.nit:5423 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5444 */
+  /* ./parser//parser.nit:5424 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5445 */
+  /* ./parser//parser.nit:5425 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5446 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5448 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5427 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5448);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5427);
   }
-  /* ./parser//parser.nit:5450 */
+  /* ./parser//parser.nit:5429 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5450);
-  }
-  /* ./parser//parser.nit:5452 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5452);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5429);
   }
-  /* ./parser//parser.nit:5454 */
+  /* ./parser//parser.nit:5431 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5454);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5431);
   }
-  /* ./parser//parser.nit:5456 */
+  /* ./parser//parser.nit:5433 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5456);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5433);
   }
-  /* ./parser//parser.nit:5458 */
+  /* ./parser//parser.nit:5435 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5458);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5435);
   }
-  /* ./parser//parser.nit:5459 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:5471 */
+  /* ./parser//parser.nit:5436 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:5448 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5472 */
+  /* ./parser//parser.nit:5449 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction122____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5472);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5449);
   }
   REGB0 = ATTR_parser___ReduceAction122____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18457,7 +18417,7 @@ void parser___ReduceAction122___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos125]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5475;
+  fra.me.line = 5452;
   fra.me.meth = LOCATE_parser___ReduceAction122___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18465,7 +18425,7 @@ void parser___ReduceAction122___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5475 */
+  /* ./parser//parser.nit:5452 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction122____goto(fra.me.REG[1]) = REGB0;
@@ -18479,7 +18439,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 = 5479;
+  fra.me.line = 5456;
   fra.me.meth = LOCATE_parser___ReduceAction123___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -18494,65 +18454,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:5481 */
+  /* ./parser//parser.nit:5458 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5482 */
+  /* ./parser//parser.nit:5459 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5483 */
+  /* ./parser//parser.nit:5460 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5484 */
+  /* ./parser//parser.nit:5461 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5485 */
+  /* ./parser//parser.nit:5462 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5486 */
+  /* ./parser//parser.nit:5463 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5487 */
+  /* ./parser//parser.nit:5464 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5489 */
+  /* ./parser//parser.nit:5466 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5489);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5466);
   }
-  /* ./parser//parser.nit:5491 */
+  /* ./parser//parser.nit:5468 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5491);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5468);
   }
-  /* ./parser//parser.nit:5493 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5470 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5493);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5470);
   }
-  /* ./parser//parser.nit:5495 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5472 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5495);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5472);
   }
-  /* ./parser//parser.nit:5497 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5474 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5497);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5474);
   }
-  /* ./parser//parser.nit:5499 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:5476 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5499);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5476);
   }
-  /* ./parser//parser.nit:5500 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
-  /* ./parser//parser.nit:5512 */
+  /* ./parser//parser.nit:5477 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:5489 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5513 */
+  /* ./parser//parser.nit:5490 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction123____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5513);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5490);
   }
   REGB0 = ATTR_parser___ReduceAction123____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18568,7 +18528,7 @@ void parser___ReduceAction123___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos126]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5516;
+  fra.me.line = 5493;
   fra.me.meth = LOCATE_parser___ReduceAction123___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18576,7 +18536,7 @@ void parser___ReduceAction123___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5516 */
+  /* ./parser//parser.nit:5493 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction123____goto(fra.me.REG[1]) = REGB0;
@@ -18585,15 +18545,15 @@ void parser___ReduceAction123___init(val_t p0, val_t p1, int* init_table){
   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 = 5520;
+  fra.me.line = 5497;
   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;
@@ -18603,76 +18563,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:5522 */
+  /* ./parser//parser.nit:5499 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5523 */
+  /* ./parser//parser.nit:5500 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5524 */
+  /* ./parser//parser.nit:5501 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5525 */
+  /* ./parser//parser.nit:5502 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5526 */
+  /* ./parser//parser.nit:5503 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5527 */
+  /* ./parser//parser.nit:5504 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5528 */
+  /* ./parser//parser.nit:5505 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5529 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5531 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5507 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5531);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5507);
   }
-  /* ./parser//parser.nit:5533 */
+  /* ./parser//parser.nit:5509 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5533);
-  }
-  /* ./parser//parser.nit:5535 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5535);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5509);
   }
-  /* ./parser//parser.nit:5537 */
+  /* ./parser//parser.nit:5511 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5537);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5511);
   }
-  /* ./parser//parser.nit:5539 */
+  /* ./parser//parser.nit:5513 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5539);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5513);
   }
-  /* ./parser//parser.nit:5541 */
+  /* ./parser//parser.nit:5515 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5541);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5515);
   }
-  /* ./parser//parser.nit:5543 */
+  /* ./parser//parser.nit:5517 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5543);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5517);
   }
-  /* ./parser//parser.nit:5544 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[3], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
-  /* ./parser//parser.nit:5556 */
+  /* ./parser//parser.nit:5518 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
+  /* ./parser//parser.nit:5530 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5557 */
+  /* ./parser//parser.nit:5531 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction124____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5557);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5531);
   }
   REGB0 = ATTR_parser___ReduceAction124____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18688,7 +18639,7 @@ void parser___ReduceAction124___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos127]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5560;
+  fra.me.line = 5534;
   fra.me.meth = LOCATE_parser___ReduceAction124___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18696,7 +18647,7 @@ void parser___ReduceAction124___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5560 */
+  /* ./parser//parser.nit:5534 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction124____goto(fra.me.REG[1]) = REGB0;
@@ -18705,15 +18656,15 @@ void parser___ReduceAction124___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction125___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 = 5564;
+  fra.me.line = 5538;
   fra.me.meth = LOCATE_parser___ReduceAction125___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;
@@ -18722,63 +18673,77 @@ void parser___ReduceAction125___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:5566 */
+  /* ./parser//parser.nit:5540 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5567 */
+  /* ./parser//parser.nit:5541 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5568 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5569 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5570 */
+  /* ./parser//parser.nit:5542 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5571 */
+  /* ./parser//parser.nit:5543 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5572 */
+  /* ./parser//parser.nit:5544 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5573 */
+  /* ./parser//parser.nit:5545 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5575 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5546 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5547 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5549 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5575);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5549);
   }
-  /* ./parser//parser.nit:5577 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5551 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5577);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5551);
   }
-  /* ./parser//parser.nit:5579 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5553 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5579);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5553);
   }
-  /* ./parser//parser.nit:5581 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5555 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5581);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5555);
   }
-  /* ./parser//parser.nit:5583 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:5557 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5583);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5557);
   }
-  /* ./parser//parser.nit:5584 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5596 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5597 */
+  /* ./parser//parser.nit:5559 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5559);
+  }
+  /* ./parser//parser.nit:5561 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5561);
+  }
+  /* ./parser//parser.nit:5562 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[3], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
+  /* ./parser//parser.nit:5574 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:5575 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction125____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5597);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5575);
   }
   REGB0 = ATTR_parser___ReduceAction125____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18794,7 +18759,7 @@ void parser___ReduceAction125___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos128]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5600;
+  fra.me.line = 5578;
   fra.me.meth = LOCATE_parser___ReduceAction125___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18802,7 +18767,7 @@ void parser___ReduceAction125___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5600 */
+  /* ./parser//parser.nit:5578 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction125____goto(fra.me.REG[1]) = REGB0;
@@ -18811,15 +18776,15 @@ void parser___ReduceAction125___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction126___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 = 5604;
+  fra.me.line = 5582;
   fra.me.meth = LOCATE_parser___ReduceAction126___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;
@@ -18828,72 +18793,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[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5606 */
+  /* ./parser//parser.nit:5584 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5607 */
+  /* ./parser//parser.nit:5585 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5608 */
+  /* ./parser//parser.nit:5586 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5609 */
+  /* ./parser//parser.nit:5587 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5610 */
+  /* ./parser//parser.nit:5588 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5611 */
+  /* ./parser//parser.nit:5589 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5612 */
+  /* ./parser//parser.nit:5590 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5613 */
+  /* ./parser//parser.nit:5591 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5614 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5616 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5616);
-  }
-  /* ./parser//parser.nit:5618 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5593 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5618);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5593);
   }
-  /* ./parser//parser.nit:5620 */
+  /* ./parser//parser.nit:5595 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5620);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5595);
   }
-  /* ./parser//parser.nit:5622 */
+  /* ./parser//parser.nit:5597 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5622);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5597);
   }
-  /* ./parser//parser.nit:5624 */
+  /* ./parser//parser.nit:5599 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5624);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5599);
   }
-  /* ./parser//parser.nit:5626 */
+  /* ./parser//parser.nit:5601 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5626);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5601);
   }
-  /* ./parser//parser.nit:5627 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5639 */
+  /* ./parser//parser.nit:5602 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:5614 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5640 */
+  /* ./parser//parser.nit:5615 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction126____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5640);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5615);
   }
   REGB0 = ATTR_parser___ReduceAction126____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18909,7 +18865,7 @@ void parser___ReduceAction126___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos129]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5643;
+  fra.me.line = 5618;
   fra.me.meth = LOCATE_parser___ReduceAction126___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18917,7 +18873,7 @@ void parser___ReduceAction126___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5643 */
+  /* ./parser//parser.nit:5618 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction126____goto(fra.me.REG[1]) = REGB0;
@@ -18931,7 +18887,7 @@ void parser___ReduceAction127___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 = 5647;
+  fra.me.line = 5622;
   fra.me.meth = LOCATE_parser___ReduceAction127___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -18946,69 +18902,69 @@ void parser___ReduceAction127___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5649 */
+  /* ./parser//parser.nit:5624 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5650 */
+  /* ./parser//parser.nit:5625 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5651 */
+  /* ./parser//parser.nit:5626 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5652 */
+  /* ./parser//parser.nit:5627 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5653 */
+  /* ./parser//parser.nit:5628 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5654 */
+  /* ./parser//parser.nit:5629 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5655 */
+  /* ./parser//parser.nit:5630 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5656 */
+  /* ./parser//parser.nit:5631 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5657 */
+  /* ./parser//parser.nit:5632 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5659 */
+  /* ./parser//parser.nit:5634 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5634);
   }
-  /* ./parser//parser.nit:5661 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5636 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5661);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5636);
   }
-  /* ./parser//parser.nit:5663 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5638 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5663);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5638);
   }
-  /* ./parser//parser.nit:5665 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5640 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5665);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5640);
   }
-  /* ./parser//parser.nit:5667 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:5642 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5667);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5642);
   }
-  /* ./parser//parser.nit:5669 */
+  /* ./parser//parser.nit:5644 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5669);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5644);
   }
-  /* ./parser//parser.nit:5670 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5682 */
+  /* ./parser//parser.nit:5645 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:5657 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5683 */
+  /* ./parser//parser.nit:5658 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction127____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5683);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5658);
   }
   REGB0 = ATTR_parser___ReduceAction127____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19024,7 +18980,7 @@ void parser___ReduceAction127___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos130]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5686;
+  fra.me.line = 5661;
   fra.me.meth = LOCATE_parser___ReduceAction127___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19032,7 +18988,7 @@ void parser___ReduceAction127___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5686 */
+  /* ./parser//parser.nit:5661 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction127____goto(fra.me.REG[1]) = REGB0;
@@ -19041,15 +18997,15 @@ void parser___ReduceAction127___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction128___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 = 5690;
+  fra.me.line = 5665;
   fra.me.meth = LOCATE_parser___ReduceAction128___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;
@@ -19059,80 +19015,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[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5692 */
+  /* ./parser//parser.nit:5667 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5693 */
+  /* ./parser//parser.nit:5668 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5694 */
+  /* ./parser//parser.nit:5669 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5695 */
+  /* ./parser//parser.nit:5670 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5696 */
+  /* ./parser//parser.nit:5671 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5697 */
+  /* ./parser//parser.nit:5672 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5698 */
+  /* ./parser//parser.nit:5673 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5699 */
+  /* ./parser//parser.nit:5674 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5700 */
+  /* ./parser//parser.nit:5675 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5701 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5703 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5703);
-  }
-  /* ./parser//parser.nit:5705 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5677 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5705);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5677);
   }
-  /* ./parser//parser.nit:5707 */
+  /* ./parser//parser.nit:5679 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5707);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5679);
   }
-  /* ./parser//parser.nit:5709 */
+  /* ./parser//parser.nit:5681 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5709);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5681);
   }
-  /* ./parser//parser.nit:5711 */
+  /* ./parser//parser.nit:5683 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5711);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5683);
   }
-  /* ./parser//parser.nit:5713 */
+  /* ./parser//parser.nit:5685 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5713);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5685);
   }
-  /* ./parser//parser.nit:5715 */
+  /* ./parser//parser.nit:5687 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5715);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5687);
   }
-  /* ./parser//parser.nit:5716 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5728 */
+  /* ./parser//parser.nit:5688 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5700 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5729 */
+  /* ./parser//parser.nit:5701 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction128____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5729);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5701);
   }
   REGB0 = ATTR_parser___ReduceAction128____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19148,7 +19095,7 @@ void parser___ReduceAction128___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos131]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5732;
+  fra.me.line = 5704;
   fra.me.meth = LOCATE_parser___ReduceAction128___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19156,7 +19103,7 @@ void parser___ReduceAction128___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5732 */
+  /* ./parser//parser.nit:5704 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction128____goto(fra.me.REG[1]) = REGB0;
@@ -19165,15 +19112,15 @@ void parser___ReduceAction128___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction129___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 = 5736;
+  fra.me.line = 5708;
   fra.me.meth = LOCATE_parser___ReduceAction129___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;
@@ -19183,71 +19130,80 @@ void parser___ReduceAction129___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:5738 */
+  /* ./parser//parser.nit:5710 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5739 */
+  /* ./parser//parser.nit:5711 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5740 */
+  /* ./parser//parser.nit:5712 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5741 */
+  /* ./parser//parser.nit:5713 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5742 */
+  /* ./parser//parser.nit:5714 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5743 */
+  /* ./parser//parser.nit:5715 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5744 */
+  /* ./parser//parser.nit:5716 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5745 */
+  /* ./parser//parser.nit:5717 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5746 */
+  /* ./parser//parser.nit:5718 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5748 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5719 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5721 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5748);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5721);
   }
-  /* ./parser//parser.nit:5750 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:5723 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5750);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5723);
   }
-  /* ./parser//parser.nit:5752 */
+  /* ./parser//parser.nit:5725 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5752);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5725);
   }
-  /* ./parser//parser.nit:5754 */
+  /* ./parser//parser.nit:5727 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5754);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5727);
   }
-  /* ./parser//parser.nit:5756 */
+  /* ./parser//parser.nit:5729 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5756);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5729);
   }
-  /* ./parser//parser.nit:5758 */
+  /* ./parser//parser.nit:5731 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5731);
+  }
+  /* ./parser//parser.nit:5733 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5758);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5733);
   }
-  /* ./parser//parser.nit:5759 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5771 */
+  /* ./parser//parser.nit:5734 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5746 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5772 */
+  /* ./parser//parser.nit:5747 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction129____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5772);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5747);
   }
   REGB0 = ATTR_parser___ReduceAction129____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19263,7 +19219,7 @@ void parser___ReduceAction129___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos132]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5775;
+  fra.me.line = 5750;
   fra.me.meth = LOCATE_parser___ReduceAction129___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19271,7 +19227,7 @@ void parser___ReduceAction129___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5775 */
+  /* ./parser//parser.nit:5750 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction129____goto(fra.me.REG[1]) = REGB0;
@@ -19280,15 +19236,15 @@ void parser___ReduceAction129___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction130___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 = 5779;
+  fra.me.line = 5754;
   fra.me.meth = LOCATE_parser___ReduceAction130___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;
@@ -19298,80 +19254,71 @@ void parser___ReduceAction130___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:5781 */
+  /* ./parser//parser.nit:5756 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5782 */
+  /* ./parser//parser.nit:5757 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5783 */
+  /* ./parser//parser.nit:5758 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5784 */
+  /* ./parser//parser.nit:5759 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5785 */
+  /* ./parser//parser.nit:5760 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5786 */
+  /* ./parser//parser.nit:5761 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5787 */
+  /* ./parser//parser.nit:5762 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5788 */
+  /* ./parser//parser.nit:5763 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5789 */
+  /* ./parser//parser.nit:5764 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5790 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5792 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5766 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5792);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5766);
   }
-  /* ./parser//parser.nit:5794 */
+  /* ./parser//parser.nit:5768 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5794);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5768);
   }
-  /* ./parser//parser.nit:5796 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5796);
-  }
-  /* ./parser//parser.nit:5798 */
+  /* ./parser//parser.nit:5770 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5798);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5770);
   }
-  /* ./parser//parser.nit:5800 */
+  /* ./parser//parser.nit:5772 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5800);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5772);
   }
-  /* ./parser//parser.nit:5802 */
+  /* ./parser//parser.nit:5774 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5802);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5774);
   }
-  /* ./parser//parser.nit:5804 */
+  /* ./parser//parser.nit:5776 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5804);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5776);
   }
-  /* ./parser//parser.nit:5805 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5817 */
+  /* ./parser//parser.nit:5777 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:5789 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5818 */
+  /* ./parser//parser.nit:5790 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction130____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5818);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5790);
   }
   REGB0 = ATTR_parser___ReduceAction130____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19387,7 +19334,7 @@ void parser___ReduceAction130___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos133]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5821;
+  fra.me.line = 5793;
   fra.me.meth = LOCATE_parser___ReduceAction130___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19395,7 +19342,7 @@ void parser___ReduceAction130___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5821 */
+  /* ./parser//parser.nit:5793 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction130____goto(fra.me.REG[1]) = REGB0;
@@ -19409,7 +19356,7 @@ void parser___ReduceAction131___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 = 5825;
+  fra.me.line = 5797;
   fra.me.meth = LOCATE_parser___ReduceAction131___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -19425,77 +19372,77 @@ void parser___ReduceAction131___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5827 */
+  /* ./parser//parser.nit:5799 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5828 */
+  /* ./parser//parser.nit:5800 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5829 */
+  /* ./parser//parser.nit:5801 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5830 */
+  /* ./parser//parser.nit:5802 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5831 */
+  /* ./parser//parser.nit:5803 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5832 */
+  /* ./parser//parser.nit:5804 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5833 */
+  /* ./parser//parser.nit:5805 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5834 */
+  /* ./parser//parser.nit:5806 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5835 */
+  /* ./parser//parser.nit:5807 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5836 */
+  /* ./parser//parser.nit:5808 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5838 */
+  /* ./parser//parser.nit:5810 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5838);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5810);
   }
-  /* ./parser//parser.nit:5840 */
+  /* ./parser//parser.nit:5812 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5840);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5812);
   }
-  /* ./parser//parser.nit:5842 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5814 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5842);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5814);
   }
-  /* ./parser//parser.nit:5844 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5816 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5844);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5816);
   }
-  /* ./parser//parser.nit:5846 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5818 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5846);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5818);
   }
-  /* ./parser//parser.nit:5848 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:5820 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5848);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5820);
   }
-  /* ./parser//parser.nit:5850 */
+  /* ./parser//parser.nit:5822 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5850);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5822);
   }
-  /* ./parser//parser.nit:5851 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:5863 */
+  /* ./parser//parser.nit:5823 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:5835 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5864 */
+  /* ./parser//parser.nit:5836 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction131____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5864);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5836);
   }
   REGB0 = ATTR_parser___ReduceAction131____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19511,7 +19458,7 @@ void parser___ReduceAction131___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos134]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5867;
+  fra.me.line = 5839;
   fra.me.meth = LOCATE_parser___ReduceAction131___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19519,7 +19466,7 @@ void parser___ReduceAction131___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5867 */
+  /* ./parser//parser.nit:5839 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction131____goto(fra.me.REG[1]) = REGB0;
@@ -19528,15 +19475,15 @@ void parser___ReduceAction131___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction132___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;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5871;
+  fra.me.line = 5843;
   fra.me.meth = LOCATE_parser___ReduceAction132___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;
@@ -19547,88 +19494,79 @@ void parser___ReduceAction132___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:5873 */
+  /* ./parser//parser.nit:5845 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5874 */
+  /* ./parser//parser.nit:5846 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5875 */
+  /* ./parser//parser.nit:5847 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5876 */
+  /* ./parser//parser.nit:5848 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5877 */
+  /* ./parser//parser.nit:5849 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5878 */
+  /* ./parser//parser.nit:5850 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5879 */
+  /* ./parser//parser.nit:5851 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5880 */
+  /* ./parser//parser.nit:5852 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5881 */
+  /* ./parser//parser.nit:5853 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5882 */
+  /* ./parser//parser.nit:5854 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5883 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5885 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5856 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5885);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5856);
   }
-  /* ./parser//parser.nit:5887 */
+  /* ./parser//parser.nit:5858 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5887);
-  }
-  /* ./parser//parser.nit:5889 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5889);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5858);
   }
-  /* ./parser//parser.nit:5891 */
+  /* ./parser//parser.nit:5860 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5891);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5860);
   }
-  /* ./parser//parser.nit:5893 */
+  /* ./parser//parser.nit:5862 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5893);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5862);
   }
-  /* ./parser//parser.nit:5895 */
+  /* ./parser//parser.nit:5864 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5895);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5864);
   }
-  /* ./parser//parser.nit:5897 */
+  /* ./parser//parser.nit:5866 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5897);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5866);
   }
-  /* ./parser//parser.nit:5899 */
+  /* ./parser//parser.nit:5868 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5899);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5868);
   }
-  /* ./parser//parser.nit:5900 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[4], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:5912 */
+  /* ./parser//parser.nit:5869 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
+  /* ./parser//parser.nit:5881 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5913 */
+  /* ./parser//parser.nit:5882 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction132____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5913);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5882);
   }
   REGB0 = ATTR_parser___ReduceAction132____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19644,7 +19582,7 @@ void parser___ReduceAction132___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos135]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5916;
+  fra.me.line = 5885;
   fra.me.meth = LOCATE_parser___ReduceAction132___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19652,7 +19590,7 @@ void parser___ReduceAction132___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5916 */
+  /* ./parser//parser.nit:5885 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction132____goto(fra.me.REG[1]) = REGB0;
@@ -19661,15 +19599,15 @@ void parser___ReduceAction132___init(val_t p0, val_t p1, int* init_table){
   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 = 5920;
+  fra.me.line = 5889;
   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;
@@ -19678,61 +19616,90 @@ 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:5922 */
+  /* ./parser//parser.nit:5891 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5923 */
+  /* ./parser//parser.nit:5892 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5924 */
+  /* ./parser//parser.nit:5893 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5925 */
+  /* ./parser//parser.nit:5894 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5895 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5926 */
+  /* ./parser//parser.nit:5896 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5927 */
+  /* ./parser//parser.nit:5897 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5928 */
+  /* ./parser//parser.nit:5898 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5930 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5899 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5900 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5901 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5903 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5930);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5903);
   }
-  /* ./parser//parser.nit:5932 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5905 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5932);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5905);
   }
-  /* ./parser//parser.nit:5934 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* ./parser//parser.nit:5907 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5934);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5907);
   }
-  /* ./parser//parser.nit:5936 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:5909 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5909);
+  }
+  /* ./parser//parser.nit:5911 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5911);
+  }
+  /* ./parser//parser.nit:5913 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5936);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5913);
   }
-  /* ./parser//parser.nit:5938 */
+  /* ./parser//parser.nit:5915 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5915);
+  }
+  /* ./parser//parser.nit:5917 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5938);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5917);
   }
-  /* ./parser//parser.nit:5939 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5948 */
+  /* ./parser//parser.nit:5918 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[4], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
+  /* ./parser//parser.nit:5930 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5949 */
+  /* ./parser//parser.nit:5931 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction133____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5949);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5931);
   }
   REGB0 = ATTR_parser___ReduceAction133____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19748,7 +19715,7 @@ void parser___ReduceAction133___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos136]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5952;
+  fra.me.line = 5934;
   fra.me.meth = LOCATE_parser___ReduceAction133___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19756,7 +19723,7 @@ void parser___ReduceAction133___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5952 */
+  /* ./parser//parser.nit:5934 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction133____goto(fra.me.REG[1]) = REGB0;
@@ -19765,15 +19732,15 @@ void parser___ReduceAction133___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction134___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 = 5956;
+  fra.me.line = 5938;
   fra.me.meth = LOCATE_parser___ReduceAction134___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;
@@ -19782,70 +19749,61 @@ void parser___ReduceAction134___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:5958 */
+  /* ./parser//parser.nit:5940 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5959 */
+  /* ./parser//parser.nit:5941 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5960 */
+  /* ./parser//parser.nit:5942 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5961 */
+  /* ./parser//parser.nit:5943 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5962 */
+  /* ./parser//parser.nit:5944 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5963 */
+  /* ./parser//parser.nit:5945 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5964 */
+  /* ./parser//parser.nit:5946 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5965 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5967 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5967);
-  }
-  /* ./parser//parser.nit:5969 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5948 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5969);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5948);
   }
-  /* ./parser//parser.nit:5971 */
+  /* ./parser//parser.nit:5950 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5971);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5950);
   }
-  /* ./parser//parser.nit:5973 */
+  /* ./parser//parser.nit:5952 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5973);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5952);
   }
-  /* ./parser//parser.nit:5975 */
+  /* ./parser//parser.nit:5954 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5975);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5954);
   }
-  /* ./parser//parser.nit:5977 */
+  /* ./parser//parser.nit:5956 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5977);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5956);
   }
-  /* ./parser//parser.nit:5978 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5987 */
+  /* ./parser//parser.nit:5957 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5966 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5988 */
+  /* ./parser//parser.nit:5967 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction134____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5988);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5967);
   }
   REGB0 = ATTR_parser___ReduceAction134____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19861,7 +19819,7 @@ void parser___ReduceAction134___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos137]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5991;
+  fra.me.line = 5970;
   fra.me.meth = LOCATE_parser___ReduceAction134___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19869,7 +19827,7 @@ void parser___ReduceAction134___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:5991 */
+  /* ./parser//parser.nit:5970 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction134____goto(fra.me.REG[1]) = REGB0;
@@ -19883,7 +19841,7 @@ void parser___ReduceAction135___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 = 5995;
+  fra.me.line = 5974;
   fra.me.meth = LOCATE_parser___ReduceAction135___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -19898,67 +19856,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:5997 */
+  /* ./parser//parser.nit:5976 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5998 */
+  /* ./parser//parser.nit:5977 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5999 */
+  /* ./parser//parser.nit:5978 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6000 */
+  /* ./parser//parser.nit:5979 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6001 */
+  /* ./parser//parser.nit:5980 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6002 */
+  /* ./parser//parser.nit:5981 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6003 */
+  /* ./parser//parser.nit:5982 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6004 */
+  /* ./parser//parser.nit:5983 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6006 */
+  /* ./parser//parser.nit:5985 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6006);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5985);
   }
-  /* ./parser//parser.nit:6008 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5987 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6008);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5987);
   }
-  /* ./parser//parser.nit:6010 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* ./parser//parser.nit:5989 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6010);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5989);
   }
-  /* ./parser//parser.nit:6012 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* ./parser//parser.nit:5991 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6012);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5991);
   }
-  /* ./parser//parser.nit:6014 */
+  /* ./parser//parser.nit:5993 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6014);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5993);
   }
-  /* ./parser//parser.nit:6016 */
+  /* ./parser//parser.nit:5995 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6016);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5995);
   }
-  /* ./parser//parser.nit:6017 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6026 */
+  /* ./parser//parser.nit:5996 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6005 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6027 */
+  /* ./parser//parser.nit:6006 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction135____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6027);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6006);
   }
   REGB0 = ATTR_parser___ReduceAction135____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19974,7 +19932,7 @@ void parser___ReduceAction135___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos138]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6030;
+  fra.me.line = 6009;
   fra.me.meth = LOCATE_parser___ReduceAction135___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19982,7 +19940,7 @@ void parser___ReduceAction135___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6030 */
+  /* ./parser//parser.nit:6009 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction135____goto(fra.me.REG[1]) = REGB0;
@@ -19991,15 +19949,15 @@ void parser___ReduceAction135___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction136___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 = 6034;
+  fra.me.line = 6013;
   fra.me.meth = LOCATE_parser___ReduceAction136___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;
@@ -20009,78 +19967,69 @@ void parser___ReduceAction136___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:6036 */
+  /* ./parser//parser.nit:6015 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6037 */
+  /* ./parser//parser.nit:6016 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6038 */
+  /* ./parser//parser.nit:6017 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6039 */
+  /* ./parser//parser.nit:6018 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6040 */
+  /* ./parser//parser.nit:6019 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6041 */
+  /* ./parser//parser.nit:6020 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6042 */
+  /* ./parser//parser.nit:6021 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6043 */
+  /* ./parser//parser.nit:6022 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6044 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6046 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6046);
-  }
-  /* ./parser//parser.nit:6048 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:6024 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6048);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6024);
   }
-  /* ./parser//parser.nit:6050 */
+  /* ./parser//parser.nit:6026 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6050);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6026);
   }
-  /* ./parser//parser.nit:6052 */
+  /* ./parser//parser.nit:6028 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6052);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6028);
   }
-  /* ./parser//parser.nit:6054 */
+  /* ./parser//parser.nit:6030 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6054);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6030);
   }
-  /* ./parser//parser.nit:6056 */
+  /* ./parser//parser.nit:6032 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6056);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6032);
   }
-  /* ./parser//parser.nit:6058 */
+  /* ./parser//parser.nit:6034 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6058);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6034);
   }
-  /* ./parser//parser.nit:6059 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6068 */
+  /* ./parser//parser.nit:6035 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6044 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6069 */
+  /* ./parser//parser.nit:6045 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction136____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6069);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6045);
   }
   REGB0 = ATTR_parser___ReduceAction136____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20096,7 +20045,7 @@ void parser___ReduceAction136___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos139]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6072;
+  fra.me.line = 6048;
   fra.me.meth = LOCATE_parser___ReduceAction136___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20104,7 +20053,7 @@ void parser___ReduceAction136___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6072 */
+  /* ./parser//parser.nit:6048 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction136____goto(fra.me.REG[1]) = REGB0;
@@ -20113,15 +20062,15 @@ void parser___ReduceAction136___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction137___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 = 6076;
+  fra.me.line = 6052;
   fra.me.meth = LOCATE_parser___ReduceAction137___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;
@@ -20130,63 +20079,79 @@ void parser___ReduceAction137___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:6078 */
+  /* ./parser//parser.nit:6054 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6079 */
+  /* ./parser//parser.nit:6055 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6080 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6081 */
+  /* ./parser//parser.nit:6056 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6082 */
+  /* ./parser//parser.nit:6057 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6083 */
+  /* ./parser//parser.nit:6058 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6084 */
+  /* ./parser//parser.nit:6059 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6085 */
+  /* ./parser//parser.nit:6060 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6087 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:6061 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6062 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6064 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6087);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6064);
   }
-  /* ./parser//parser.nit:6089 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:6066 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6089);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6066);
   }
-  /* ./parser//parser.nit:6091 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* ./parser//parser.nit:6068 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6068);
+  }
+  /* ./parser//parser.nit:6070 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6070);
+  }
+  /* ./parser//parser.nit:6072 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6091);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6072);
   }
-  /* ./parser//parser.nit:6093 */
+  /* ./parser//parser.nit:6074 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6093);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6074);
   }
-  /* ./parser//parser.nit:6095 */
+  /* ./parser//parser.nit:6076 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6095);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6076);
   }
-  /* ./parser//parser.nit:6096 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6105 */
+  /* ./parser//parser.nit:6077 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6086 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6106 */
+  /* ./parser//parser.nit:6087 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction137____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6106);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6087);
   }
   REGB0 = ATTR_parser___ReduceAction137____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20202,7 +20167,7 @@ void parser___ReduceAction137___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos140]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6109;
+  fra.me.line = 6090;
   fra.me.meth = LOCATE_parser___ReduceAction137___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20210,7 +20175,7 @@ void parser___ReduceAction137___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6109 */
+  /* ./parser//parser.nit:6090 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction137____goto(fra.me.REG[1]) = REGB0;
@@ -20219,15 +20184,15 @@ void parser___ReduceAction137___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction138___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 = 6113;
+  fra.me.line = 6094;
   fra.me.meth = LOCATE_parser___ReduceAction138___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;
@@ -20236,72 +20201,63 @@ void parser___ReduceAction138___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:6115 */
+  /* ./parser//parser.nit:6096 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6116 */
+  /* ./parser//parser.nit:6097 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6117 */
+  /* ./parser//parser.nit:6098 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6118 */
+  /* ./parser//parser.nit:6099 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6119 */
+  /* ./parser//parser.nit:6100 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6120 */
+  /* ./parser//parser.nit:6101 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6121 */
+  /* ./parser//parser.nit:6102 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6122 */
+  /* ./parser//parser.nit:6103 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6123 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6125 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6125);
-  }
-  /* ./parser//parser.nit:6127 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:6105 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6127);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6105);
   }
-  /* ./parser//parser.nit:6129 */
+  /* ./parser//parser.nit:6107 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6129);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6107);
   }
-  /* ./parser//parser.nit:6131 */
+  /* ./parser//parser.nit:6109 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6131);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6109);
   }
-  /* ./parser//parser.nit:6133 */
+  /* ./parser//parser.nit:6111 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6133);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6111);
   }
-  /* ./parser//parser.nit:6135 */
+  /* ./parser//parser.nit:6113 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6135);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6113);
   }
-  /* ./parser//parser.nit:6136 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6145 */
+  /* ./parser//parser.nit:6114 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6123 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6146 */
+  /* ./parser//parser.nit:6124 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction138____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6146);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6124);
   }
   REGB0 = ATTR_parser___ReduceAction138____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20317,7 +20273,7 @@ void parser___ReduceAction138___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos141]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6149;
+  fra.me.line = 6127;
   fra.me.meth = LOCATE_parser___ReduceAction138___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20325,7 +20281,7 @@ void parser___ReduceAction138___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6149 */
+  /* ./parser//parser.nit:6127 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction138____goto(fra.me.REG[1]) = REGB0;
@@ -20339,7 +20295,7 @@ void parser___ReduceAction139___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 = 6153;
+  fra.me.line = 6131;
   fra.me.meth = LOCATE_parser___ReduceAction139___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -20354,69 +20310,69 @@ void parser___ReduceAction139___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6155 */
+  /* ./parser//parser.nit:6133 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6156 */
+  /* ./parser//parser.nit:6134 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6157 */
+  /* ./parser//parser.nit:6135 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6158 */
+  /* ./parser//parser.nit:6136 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6159 */
+  /* ./parser//parser.nit:6137 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6160 */
+  /* ./parser//parser.nit:6138 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6161 */
+  /* ./parser//parser.nit:6139 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6162 */
+  /* ./parser//parser.nit:6140 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6163 */
+  /* ./parser//parser.nit:6141 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6165 */
+  /* ./parser//parser.nit:6143 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6165);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6143);
   }
-  /* ./parser//parser.nit:6167 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:6145 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6167);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6145);
   }
-  /* ./parser//parser.nit:6169 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* ./parser//parser.nit:6147 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6169);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6147);
   }
-  /* ./parser//parser.nit:6171 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* ./parser//parser.nit:6149 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6171);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6149);
   }
-  /* ./parser//parser.nit:6173 */
+  /* ./parser//parser.nit:6151 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6173);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6151);
   }
-  /* ./parser//parser.nit:6175 */
+  /* ./parser//parser.nit:6153 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6175);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6153);
   }
-  /* ./parser//parser.nit:6176 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6185 */
+  /* ./parser//parser.nit:6154 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6163 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6186 */
+  /* ./parser//parser.nit:6164 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction139____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6186);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6164);
   }
   REGB0 = ATTR_parser___ReduceAction139____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20432,7 +20388,7 @@ void parser___ReduceAction139___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos142]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6189;
+  fra.me.line = 6167;
   fra.me.meth = LOCATE_parser___ReduceAction139___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20440,7 +20396,7 @@ void parser___ReduceAction139___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6189 */
+  /* ./parser//parser.nit:6167 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction139____goto(fra.me.REG[1]) = REGB0;
@@ -20449,15 +20405,15 @@ void parser___ReduceAction139___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction140___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 = 6193;
+  fra.me.line = 6171;
   fra.me.meth = LOCATE_parser___ReduceAction140___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;
@@ -20467,80 +20423,71 @@ void parser___ReduceAction140___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:6195 */
+  /* ./parser//parser.nit:6173 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6196 */
+  /* ./parser//parser.nit:6174 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6197 */
+  /* ./parser//parser.nit:6175 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6198 */
+  /* ./parser//parser.nit:6176 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6199 */
+  /* ./parser//parser.nit:6177 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6200 */
+  /* ./parser//parser.nit:6178 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6201 */
+  /* ./parser//parser.nit:6179 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6202 */
+  /* ./parser//parser.nit:6180 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6203 */
+  /* ./parser//parser.nit:6181 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6204 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6206 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6206);
-  }
-  /* ./parser//parser.nit:6208 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:6183 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6208);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6183);
   }
-  /* ./parser//parser.nit:6210 */
+  /* ./parser//parser.nit:6185 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6210);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6185);
   }
-  /* ./parser//parser.nit:6212 */
+  /* ./parser//parser.nit:6187 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6212);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6187);
   }
-  /* ./parser//parser.nit:6214 */
+  /* ./parser//parser.nit:6189 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6214);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6189);
   }
-  /* ./parser//parser.nit:6216 */
+  /* ./parser//parser.nit:6191 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6216);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6191);
   }
-  /* ./parser//parser.nit:6218 */
+  /* ./parser//parser.nit:6193 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6218);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6193);
   }
-  /* ./parser//parser.nit:6219 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6228 */
+  /* ./parser//parser.nit:6194 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6203 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6229 */
+  /* ./parser//parser.nit:6204 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction140____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6229);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6204);
   }
   REGB0 = ATTR_parser___ReduceAction140____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20556,7 +20503,7 @@ void parser___ReduceAction140___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos143]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6232;
+  fra.me.line = 6207;
   fra.me.meth = LOCATE_parser___ReduceAction140___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20564,7 +20511,7 @@ void parser___ReduceAction140___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6232 */
+  /* ./parser//parser.nit:6207 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction140____goto(fra.me.REG[1]) = REGB0;
@@ -20573,15 +20520,15 @@ void parser___ReduceAction140___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction141___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 = 6236;
+  fra.me.line = 6211;
   fra.me.meth = LOCATE_parser___ReduceAction141___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;
@@ -20590,59 +20537,81 @@ void parser___ReduceAction141___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:6238 */
+  /* ./parser//parser.nit:6213 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6239 */
+  /* ./parser//parser.nit:6214 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6215 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6240 */
+  /* ./parser//parser.nit:6216 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6241 */
+  /* ./parser//parser.nit:6217 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6218 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6242 */
+  /* ./parser//parser.nit:6219 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6243 */
+  /* ./parser//parser.nit:6220 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6245 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:6221 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6222 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6224 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6245);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6224);
   }
-  /* ./parser//parser.nit:6247 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:6226 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6247);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6226);
   }
-  /* ./parser//parser.nit:6249 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwtype, ID_TKwtype)) /*cast nullable TKwtype*/;
+  /* ./parser//parser.nit:6228 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6249);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6228);
   }
-  /* ./parser//parser.nit:6251 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* ./parser//parser.nit:6230 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6251);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6230);
   }
-  /* ./parser//parser.nit:6253 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:6232 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6253);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6232);
   }
-  /* ./parser//parser.nit:6254 */
-  fra.me.REG[3] = NEW_ATypePropdef_parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6262 */
+  /* ./parser//parser.nit:6234 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6234);
+  }
+  /* ./parser//parser.nit:6236 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6236);
+  }
+  /* ./parser//parser.nit:6237 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6246 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6263 */
+  /* ./parser//parser.nit:6247 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction141____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6263);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6247);
   }
   REGB0 = ATTR_parser___ReduceAction141____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20658,7 +20627,7 @@ void parser___ReduceAction141___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos144]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6266;
+  fra.me.line = 6250;
   fra.me.meth = LOCATE_parser___ReduceAction141___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20666,7 +20635,7 @@ void parser___ReduceAction141___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6266 */
+  /* ./parser//parser.nit:6250 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction141____goto(fra.me.REG[1]) = REGB0;
@@ -20675,15 +20644,15 @@ void parser___ReduceAction141___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction142___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 = 6270;
+  fra.me.line = 6254;
   fra.me.meth = LOCATE_parser___ReduceAction142___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;
@@ -20692,68 +20661,59 @@ void parser___ReduceAction142___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:6272 */
+  /* ./parser//parser.nit:6256 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6273 */
+  /* ./parser//parser.nit:6257 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6274 */
+  /* ./parser//parser.nit:6258 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6275 */
+  /* ./parser//parser.nit:6259 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6276 */
+  /* ./parser//parser.nit:6260 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6277 */
+  /* ./parser//parser.nit:6261 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6278 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6280 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6280);
-  }
-  /* ./parser//parser.nit:6282 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:6263 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6282);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6263);
   }
-  /* ./parser//parser.nit:6284 */
+  /* ./parser//parser.nit:6265 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6284);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6265);
   }
-  /* ./parser//parser.nit:6286 */
+  /* ./parser//parser.nit:6267 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwtype, ID_TKwtype)) /*cast nullable TKwtype*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6286);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6267);
   }
-  /* ./parser//parser.nit:6288 */
+  /* ./parser//parser.nit:6269 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6288);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6269);
   }
-  /* ./parser//parser.nit:6290 */
+  /* ./parser//parser.nit:6271 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6290);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6271);
   }
-  /* ./parser//parser.nit:6291 */
-  fra.me.REG[3] = NEW_ATypePropdef_parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6299 */
+  /* ./parser//parser.nit:6272 */
+  fra.me.REG[3] = NEW_ATypePropdef_parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6280 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6300 */
+  /* ./parser//parser.nit:6281 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction142____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6300);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6281);
   }
   REGB0 = ATTR_parser___ReduceAction142____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20769,7 +20729,7 @@ void parser___ReduceAction142___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos145]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6303;
+  fra.me.line = 6284;
   fra.me.meth = LOCATE_parser___ReduceAction142___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20777,7 +20737,7 @@ void parser___ReduceAction142___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6303 */
+  /* ./parser//parser.nit:6284 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction142____goto(fra.me.REG[1]) = REGB0;
@@ -20786,33 +20746,78 @@ void parser___ReduceAction142___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction143___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 = 6307;
+  fra.me.line = 6288;
   fra.me.meth = LOCATE_parser___ReduceAction143___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:6309 */
+  /* ./parser//parser.nit:6290 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6310 */
+  /* ./parser//parser.nit:6291 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6312 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
+  /* ./parser//parser.nit:6292 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6293 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6294 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6295 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6296 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6298 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6312);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6298);
   }
-  /* ./parser//parser.nit:6313 */
-  fra.me.REG[3] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6300 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6300);
+  }
+  /* ./parser//parser.nit:6302 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6302);
+  }
+  /* ./parser//parser.nit:6304 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwtype, ID_TKwtype)) /*cast nullable TKwtype*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6304);
+  }
+  /* ./parser//parser.nit:6306 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6306);
+  }
+  /* ./parser//parser.nit:6308 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6308);
+  }
+  /* ./parser//parser.nit:6309 */
+  fra.me.REG[3] = NEW_ATypePropdef_parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:6317 */
   fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:6318 */
@@ -20852,7 +20857,7 @@ void parser___ReduceAction143___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction144___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[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -20860,41 +20865,32 @@ void parser___ReduceAction144___action(val_t p0, val_t p1){
   fra.me.line = 6325;
   fra.me.meth = LOCATE_parser___ReduceAction144___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:6327 */
   fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6328 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6329 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6331 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6331);
-  }
-  /* ./parser//parser.nit:6333 */
+  /* ./parser//parser.nit:6330 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6333);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6330);
   }
-  /* ./parser//parser.nit:6334 */
-  fra.me.REG[3] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6338 */
+  /* ./parser//parser.nit:6331 */
+  fra.me.REG[3] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6335 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6339 */
+  /* ./parser//parser.nit:6336 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction144____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6339);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6336);
   }
   REGB0 = ATTR_parser___ReduceAction144____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20910,7 +20906,7 @@ void parser___ReduceAction144___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos147]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6342;
+  fra.me.line = 6339;
   fra.me.meth = LOCATE_parser___ReduceAction144___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20918,7 +20914,7 @@ void parser___ReduceAction144___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6342 */
+  /* ./parser//parser.nit:6339 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction144____goto(fra.me.REG[1]) = REGB0;
@@ -20927,40 +20923,49 @@ void parser___ReduceAction144___init(val_t p0, val_t p1, int* init_table){
   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[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 = 6346;
+  fra.me.line = 6343;
   fra.me.meth = LOCATE_parser___ReduceAction145___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6348 */
+  /* ./parser//parser.nit:6345 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6349 */
+  /* ./parser//parser.nit:6346 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6347 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6349 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6349);
+  }
   /* ./parser//parser.nit:6351 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Assert failed", NULL, LOCATE_parser, 6351);
   }
   /* ./parser//parser.nit:6352 */
-  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:6357 */
+  fra.me.REG[3] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6356 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6358 */
+  /* ./parser//parser.nit:6357 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction145____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6358);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6357);
   }
   REGB0 = ATTR_parser___ReduceAction145____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20976,7 +20981,7 @@ void parser___ReduceAction145___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos148]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6361;
+  fra.me.line = 6360;
   fra.me.meth = LOCATE_parser___ReduceAction145___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20984,7 +20989,7 @@ void parser___ReduceAction145___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6361 */
+  /* ./parser//parser.nit:6360 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction145____goto(fra.me.REG[1]) = REGB0;
@@ -20993,49 +20998,40 @@ void parser___ReduceAction145___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction146___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[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 = 6365;
+  fra.me.line = 6364;
   fra.me.meth = LOCATE_parser___ReduceAction146___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:6367 */
+  /* ./parser//parser.nit:6366 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6368 */
+  /* ./parser//parser.nit:6367 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:6369 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6371 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6371);
-  }
-  /* ./parser//parser.nit:6373 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6373);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6369);
   }
-  /* ./parser//parser.nit:6374 */
-  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:6379 */
+  /* ./parser//parser.nit:6370 */
+  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6375 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6380 */
+  /* ./parser//parser.nit:6376 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction146____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6380);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6376);
   }
   REGB0 = ATTR_parser___ReduceAction146____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21051,7 +21047,7 @@ void parser___ReduceAction146___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos149]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6383;
+  fra.me.line = 6379;
   fra.me.meth = LOCATE_parser___ReduceAction146___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21059,7 +21055,7 @@ void parser___ReduceAction146___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6383 */
+  /* ./parser//parser.nit:6379 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction146____goto(fra.me.REG[1]) = REGB0;
@@ -21073,7 +21069,7 @@ void parser___ReduceAction147___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 = 6387;
+  fra.me.line = 6383;
   fra.me.meth = LOCATE_parser___ReduceAction147___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -21084,33 +21080,33 @@ void parser___ReduceAction147___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:6389 */
+  /* ./parser//parser.nit:6385 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6390 */
+  /* ./parser//parser.nit:6386 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6391 */
+  /* ./parser//parser.nit:6387 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6393 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:6389 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6393);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6389);
   }
-  /* ./parser//parser.nit:6395 */
+  /* ./parser//parser.nit:6391 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6395);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6391);
   }
-  /* ./parser//parser.nit:6396 */
-  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6401 */
+  /* ./parser//parser.nit:6392 */
+  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6397 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6402 */
+  /* ./parser//parser.nit:6398 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction147____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6402);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6398);
   }
   REGB0 = ATTR_parser___ReduceAction147____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21126,7 +21122,7 @@ void parser___ReduceAction147___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos150]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6405;
+  fra.me.line = 6401;
   fra.me.meth = LOCATE_parser___ReduceAction147___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21134,7 +21130,7 @@ void parser___ReduceAction147___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6405 */
+  /* ./parser//parser.nit:6401 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction147____goto(fra.me.REG[1]) = REGB0;
@@ -21143,58 +21139,49 @@ void parser___ReduceAction147___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction148___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[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6409;
+  fra.me.line = 6405;
   fra.me.meth = LOCATE_parser___ReduceAction148___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:6411 */
+  /* ./parser//parser.nit:6407 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6412 */
+  /* ./parser//parser.nit:6408 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6413 */
+  /* ./parser//parser.nit:6409 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6414 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6416 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6416);
-  }
-  /* ./parser//parser.nit:6418 */
+  /* ./parser//parser.nit:6411 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6418);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6411);
   }
-  /* ./parser//parser.nit:6420 */
+  /* ./parser//parser.nit:6413 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6420);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6413);
   }
-  /* ./parser//parser.nit:6421 */
-  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6426 */
+  /* ./parser//parser.nit:6414 */
+  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6419 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6427 */
+  /* ./parser//parser.nit:6420 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction148____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6427);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6420);
   }
   REGB0 = ATTR_parser___ReduceAction148____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21210,7 +21197,7 @@ void parser___ReduceAction148___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos151]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6430;
+  fra.me.line = 6423;
   fra.me.meth = LOCATE_parser___ReduceAction148___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21218,7 +21205,7 @@ void parser___ReduceAction148___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6430 */
+  /* ./parser//parser.nit:6423 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction148____goto(fra.me.REG[1]) = REGB0;
@@ -21227,32 +21214,58 @@ void parser___ReduceAction148___init(val_t p0, val_t p1, int* init_table){
   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[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 = 6434;
+  fra.me.line = 6427;
   fra.me.meth = LOCATE_parser___ReduceAction149___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:6436 */
+  /* ./parser//parser.nit:6429 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6437 */
-  fra.me.REG[3] = NEW_APublicVisibility_parser_prod___APublicVisibility___init_apublicvisibility();
+  /* ./parser//parser.nit:6430 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6431 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6432 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6434 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6434);
+  }
+  /* ./parser//parser.nit:6436 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6436);
+  }
+  /* ./parser//parser.nit:6438 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6438);
+  }
   /* ./parser//parser.nit:6439 */
+  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6444 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6440 */
+  /* ./parser//parser.nit:6445 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction149____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6440);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6445);
   }
   REGB0 = ATTR_parser___ReduceAction149____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21268,7 +21281,7 @@ void parser___ReduceAction149___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos152]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6443;
+  fra.me.line = 6448;
   fra.me.meth = LOCATE_parser___ReduceAction149___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21276,7 +21289,7 @@ void parser___ReduceAction149___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6443 */
+  /* ./parser//parser.nit:6448 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction149____goto(fra.me.REG[1]) = REGB0;
@@ -21290,7 +21303,7 @@ void parser___ReduceAction150___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 = 6447;
+  fra.me.line = 6452;
   fra.me.meth = LOCATE_parser___ReduceAction150___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21300,20 +21313,10 @@ 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:6449 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6450 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6451 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6453 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwprivate, ID_TKwprivate)) /*cast nullable TKwprivate*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6453);
-  }
   /* ./parser//parser.nit:6454 */
-  fra.me.REG[3] = NEW_APrivateVisibility_parser_prod___APrivateVisibility___init_aprivatevisibility(fra.me.REG[3]);
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6455 */
+  fra.me.REG[3] = NEW_APublicVisibility_parser_prod___APublicVisibility___init_apublicvisibility();
   /* ./parser//parser.nit:6457 */
   fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:6458 */
@@ -21375,13 +21378,13 @@ void parser___ReduceAction151___action(val_t p0, val_t p1){
   /* ./parser//parser.nit:6469 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:6471 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwprotected, ID_TKwprotected)) /*cast nullable TKwprotected*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwprivate, ID_TKwprivate)) /*cast nullable TKwprivate*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Assert failed", NULL, LOCATE_parser, 6471);
   }
   /* ./parser//parser.nit:6472 */
-  fra.me.REG[3] = NEW_AProtectedVisibility_parser_prod___AProtectedVisibility___init_aprotectedvisibility(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_APrivateVisibility_parser_prod___APrivateVisibility___init_aprivatevisibility(fra.me.REG[3]);
   /* ./parser//parser.nit:6475 */
   fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:6476 */
@@ -21443,13 +21446,13 @@ void parser___ReduceAction152___action(val_t p0, val_t p1){
   /* ./parser//parser.nit:6487 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:6489 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwintrude, ID_TKwintrude)) /*cast nullable TKwintrude*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwprotected, ID_TKwprotected)) /*cast nullable TKwprotected*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Assert failed", NULL, LOCATE_parser, 6489);
   }
   /* ./parser//parser.nit:6490 */
-  fra.me.REG[3] = NEW_AIntrudeVisibility_parser_prod___AIntrudeVisibility___init_aintrudevisibility(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_AProtectedVisibility_parser_prod___AProtectedVisibility___init_aprotectedvisibility(fra.me.REG[3]);
   /* ./parser//parser.nit:6493 */
   fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:6494 */
@@ -21508,21 +21511,23 @@ void parser___ReduceAction153___action(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6504 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6506 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:6505 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6507 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwintrude, ID_TKwintrude)) /*cast nullable TKwintrude*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6506);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6507);
   }
-  /* ./parser//parser.nit:6507 */
-  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6510 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6508 */
+  fra.me.REG[3] = NEW_AIntrudeVisibility_parser_prod___AIntrudeVisibility___init_aintrudevisibility(fra.me.REG[3]);
   /* ./parser//parser.nit:6511 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6512 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction153____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6511);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6512);
   }
   REGB0 = ATTR_parser___ReduceAction153____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21538,7 +21543,7 @@ void parser___ReduceAction153___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos156]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6514;
+  fra.me.line = 6515;
   fra.me.meth = LOCATE_parser___ReduceAction153___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21546,7 +21551,7 @@ void parser___ReduceAction153___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6514 */
+  /* ./parser//parser.nit:6515 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction153____goto(fra.me.REG[1]) = REGB0;
@@ -21560,7 +21565,7 @@ void parser___ReduceAction154___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 = 6518;
+  fra.me.line = 6519;
   fra.me.meth = LOCATE_parser___ReduceAction154___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21570,25 +21575,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:6520 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6521 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6522 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6523 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
+  /* ./parser//parser.nit:6524 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6523);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6524);
   }
-  /* ./parser//parser.nit:6524 */
-  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6527 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6525 */
+  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6528 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6529 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction154____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6528);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6529);
   }
   REGB0 = ATTR_parser___ReduceAction154____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21604,7 +21609,7 @@ void parser___ReduceAction154___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos157]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6531;
+  fra.me.line = 6532;
   fra.me.meth = LOCATE_parser___ReduceAction154___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21612,7 +21617,7 @@ void parser___ReduceAction154___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6531 */
+  /* ./parser//parser.nit:6532 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction154____goto(fra.me.REG[1]) = REGB0;
@@ -21626,7 +21631,7 @@ void parser___ReduceAction155___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 = 6535;
+  fra.me.line = 6536;
   fra.me.meth = LOCATE_parser___ReduceAction155___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21636,25 +21641,25 @@ 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:6537 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6538 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6539 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6540 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TMinus, ID_TMinus)) /*cast nullable TMinus*/;
+  /* ./parser//parser.nit:6541 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6540);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6541);
   }
-  /* ./parser//parser.nit:6541 */
-  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6544 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6542 */
+  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6545 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6546 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction155____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6545);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6546);
   }
   REGB0 = ATTR_parser___ReduceAction155____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21670,7 +21675,7 @@ void parser___ReduceAction155___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos158]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6548;
+  fra.me.line = 6549;
   fra.me.meth = LOCATE_parser___ReduceAction155___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21678,7 +21683,7 @@ void parser___ReduceAction155___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6548 */
+  /* ./parser//parser.nit:6549 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction155____goto(fra.me.REG[1]) = REGB0;
@@ -21692,7 +21697,7 @@ void parser___ReduceAction156___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 = 6552;
+  fra.me.line = 6553;
   fra.me.meth = LOCATE_parser___ReduceAction156___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21702,25 +21707,25 @@ void parser___ReduceAction156___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:6554 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6555 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6556 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6557 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
+  /* ./parser//parser.nit:6558 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TMinus, ID_TMinus)) /*cast nullable TMinus*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6557);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6558);
   }
-  /* ./parser//parser.nit:6558 */
-  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6561 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6559 */
+  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6562 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6563 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction156____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6562);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6563);
   }
   REGB0 = ATTR_parser___ReduceAction156____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21736,7 +21741,7 @@ void parser___ReduceAction156___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos159]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6565;
+  fra.me.line = 6566;
   fra.me.meth = LOCATE_parser___ReduceAction156___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21744,7 +21749,7 @@ void parser___ReduceAction156___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6565 */
+  /* ./parser//parser.nit:6566 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction156____goto(fra.me.REG[1]) = REGB0;
@@ -21758,7 +21763,7 @@ void parser___ReduceAction157___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 = 6569;
+  fra.me.line = 6570;
   fra.me.meth = LOCATE_parser___ReduceAction157___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21768,25 +21773,25 @@ void parser___ReduceAction157___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:6571 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6572 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6573 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6574 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
+  /* ./parser//parser.nit:6575 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6574);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6575);
   }
-  /* ./parser//parser.nit:6575 */
-  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6578 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6576 */
+  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6579 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6580 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction157____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6579);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6580);
   }
   REGB0 = ATTR_parser___ReduceAction157____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21802,7 +21807,7 @@ void parser___ReduceAction157___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos160]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6582;
+  fra.me.line = 6583;
   fra.me.meth = LOCATE_parser___ReduceAction157___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21810,7 +21815,7 @@ void parser___ReduceAction157___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6582 */
+  /* ./parser//parser.nit:6583 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction157____goto(fra.me.REG[1]) = REGB0;
@@ -21824,7 +21829,7 @@ void parser___ReduceAction158___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 = 6586;
+  fra.me.line = 6587;
   fra.me.meth = LOCATE_parser___ReduceAction158___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21834,25 +21839,25 @@ void parser___ReduceAction158___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:6588 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6589 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6590 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6591 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
+  /* ./parser//parser.nit:6592 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6591);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6592);
   }
-  /* ./parser//parser.nit:6592 */
-  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6595 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6593 */
+  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6596 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6597 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction158____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, 6597);
   }
   REGB0 = ATTR_parser___ReduceAction158____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21868,7 +21873,7 @@ void parser___ReduceAction158___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos161]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6599;
+  fra.me.line = 6600;
   fra.me.meth = LOCATE_parser___ReduceAction158___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21876,7 +21881,7 @@ void parser___ReduceAction158___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6599 */
+  /* ./parser//parser.nit:6600 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction158____goto(fra.me.REG[1]) = REGB0;
@@ -21890,7 +21895,7 @@ void parser___ReduceAction159___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 = 6603;
+  fra.me.line = 6604;
   fra.me.meth = LOCATE_parser___ReduceAction159___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21900,25 +21905,25 @@ void parser___ReduceAction159___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:6605 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6606 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6607 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6608 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
+  /* ./parser//parser.nit:6609 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6608);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6609);
   }
-  /* ./parser//parser.nit:6609 */
-  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6612 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6610 */
+  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6613 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6614 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction159____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6613);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6614);
   }
   REGB0 = ATTR_parser___ReduceAction159____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21934,7 +21939,7 @@ void parser___ReduceAction159___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos162]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6616;
+  fra.me.line = 6617;
   fra.me.meth = LOCATE_parser___ReduceAction159___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21942,7 +21947,7 @@ void parser___ReduceAction159___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6616 */
+  /* ./parser//parser.nit:6617 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction159____goto(fra.me.REG[1]) = REGB0;
@@ -21956,7 +21961,7 @@ void parser___ReduceAction160___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 = 6620;
+  fra.me.line = 6621;
   fra.me.meth = LOCATE_parser___ReduceAction160___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21966,25 +21971,25 @@ void parser___ReduceAction160___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:6622 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6623 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6624 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6625 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
+  /* ./parser//parser.nit:6626 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6625);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6626);
   }
-  /* ./parser//parser.nit:6626 */
-  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6629 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6627 */
+  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6630 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6631 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction160____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6630);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6631);
   }
   REGB0 = ATTR_parser___ReduceAction160____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22000,7 +22005,7 @@ void parser___ReduceAction160___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos163]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6633;
+  fra.me.line = 6634;
   fra.me.meth = LOCATE_parser___ReduceAction160___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22008,7 +22013,7 @@ void parser___ReduceAction160___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6633 */
+  /* ./parser//parser.nit:6634 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction160____goto(fra.me.REG[1]) = REGB0;
@@ -22022,7 +22027,7 @@ void parser___ReduceAction161___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 = 6637;
+  fra.me.line = 6638;
   fra.me.meth = LOCATE_parser___ReduceAction161___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22032,25 +22037,25 @@ void parser___ReduceAction161___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:6639 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6640 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6641 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6642 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
+  /* ./parser//parser.nit:6643 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6642);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6643);
   }
-  /* ./parser//parser.nit:6643 */
-  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6646 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6644 */
+  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6647 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6648 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction161____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6647);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6648);
   }
   REGB0 = ATTR_parser___ReduceAction161____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22066,7 +22071,7 @@ void parser___ReduceAction161___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos164]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6650;
+  fra.me.line = 6651;
   fra.me.meth = LOCATE_parser___ReduceAction161___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22074,7 +22079,7 @@ void parser___ReduceAction161___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6650 */
+  /* ./parser//parser.nit:6651 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction161____goto(fra.me.REG[1]) = REGB0;
@@ -22088,7 +22093,7 @@ void parser___ReduceAction162___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 = 6654;
+  fra.me.line = 6655;
   fra.me.meth = LOCATE_parser___ReduceAction162___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22098,25 +22103,25 @@ void parser___ReduceAction162___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:6656 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6657 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6658 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6659 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
+  /* ./parser//parser.nit:6660 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6660);
   }
-  /* ./parser//parser.nit:6660 */
-  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6663 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6661 */
+  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6664 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6665 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction162____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6664);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6665);
   }
   REGB0 = ATTR_parser___ReduceAction162____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22132,7 +22137,7 @@ void parser___ReduceAction162___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos165]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6667;
+  fra.me.line = 6668;
   fra.me.meth = LOCATE_parser___ReduceAction162___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22140,7 +22145,7 @@ void parser___ReduceAction162___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6667 */
+  /* ./parser//parser.nit:6668 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction162____goto(fra.me.REG[1]) = REGB0;
@@ -22154,7 +22159,7 @@ void parser___ReduceAction163___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 = 6671;
+  fra.me.line = 6672;
   fra.me.meth = LOCATE_parser___ReduceAction163___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22164,25 +22169,25 @@ void parser___ReduceAction163___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:6673 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6674 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6675 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6676 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
+  /* ./parser//parser.nit:6677 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6676);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6677);
   }
-  /* ./parser//parser.nit:6677 */
-  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6680 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6678 */
+  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6681 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6682 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction163____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6681);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6682);
   }
   REGB0 = ATTR_parser___ReduceAction163____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22198,7 +22203,7 @@ void parser___ReduceAction163___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos166]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6684;
+  fra.me.line = 6685;
   fra.me.meth = LOCATE_parser___ReduceAction163___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22206,7 +22211,7 @@ void parser___ReduceAction163___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6684 */
+  /* ./parser//parser.nit:6685 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction163____goto(fra.me.REG[1]) = REGB0;
@@ -22220,7 +22225,7 @@ void parser___ReduceAction164___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 = 6688;
+  fra.me.line = 6689;
   fra.me.meth = LOCATE_parser___ReduceAction164___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22230,25 +22235,25 @@ void parser___ReduceAction164___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:6690 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6691 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6692 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6693 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
+  /* ./parser//parser.nit:6694 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6693);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6694);
   }
-  /* ./parser//parser.nit:6694 */
-  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6697 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6695 */
+  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6698 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6699 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction164____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6698);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6699);
   }
   REGB0 = ATTR_parser___ReduceAction164____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22264,7 +22269,7 @@ void parser___ReduceAction164___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos167]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6701;
+  fra.me.line = 6702;
   fra.me.meth = LOCATE_parser___ReduceAction164___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22272,7 +22277,7 @@ void parser___ReduceAction164___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6701 */
+  /* ./parser//parser.nit:6702 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction164____goto(fra.me.REG[1]) = REGB0;
@@ -22286,7 +22291,7 @@ void parser___ReduceAction165___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 = 6705;
+  fra.me.line = 6706;
   fra.me.meth = LOCATE_parser___ReduceAction165___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22296,25 +22301,25 @@ void parser___ReduceAction165___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:6707 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6708 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6709 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6710 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLl, ID_TLl)) /*cast nullable TLl*/;
+  /* ./parser//parser.nit:6711 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6710);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6711);
   }
-  /* ./parser//parser.nit:6711 */
-  fra.me.REG[3] = NEW_ALlMethid_parser_prod___ALlMethid___init_allmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6714 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6712 */
+  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6715 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6716 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction165____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6715);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6716);
   }
   REGB0 = ATTR_parser___ReduceAction165____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22330,7 +22335,7 @@ void parser___ReduceAction165___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos168]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6718;
+  fra.me.line = 6719;
   fra.me.meth = LOCATE_parser___ReduceAction165___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22338,7 +22343,7 @@ void parser___ReduceAction165___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6718 */
+  /* ./parser//parser.nit:6719 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction165____goto(fra.me.REG[1]) = REGB0;
@@ -22352,7 +22357,7 @@ void parser___ReduceAction166___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 = 6722;
+  fra.me.line = 6723;
   fra.me.meth = LOCATE_parser___ReduceAction166___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22362,25 +22367,25 @@ void parser___ReduceAction166___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:6724 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6725 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6726 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6727 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGg, ID_TGg)) /*cast nullable TGg*/;
+  /* ./parser//parser.nit:6728 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLl, ID_TLl)) /*cast nullable TLl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6727);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6728);
   }
-  /* ./parser//parser.nit:6728 */
-  fra.me.REG[3] = NEW_AGgMethid_parser_prod___AGgMethid___init_aggmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6731 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6729 */
+  fra.me.REG[3] = NEW_ALlMethid_parser_prod___ALlMethid___init_allmethid(fra.me.REG[3]);
   /* ./parser//parser.nit:6732 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6733 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction166____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6732);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6733);
   }
   REGB0 = ATTR_parser___ReduceAction166____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22396,7 +22401,7 @@ void parser___ReduceAction166___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos169]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6735;
+  fra.me.line = 6736;
   fra.me.meth = LOCATE_parser___ReduceAction166___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22404,7 +22409,7 @@ void parser___ReduceAction166___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6735 */
+  /* ./parser//parser.nit:6736 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction166____goto(fra.me.REG[1]) = REGB0;
@@ -22413,49 +22418,40 @@ void parser___ReduceAction166___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction167___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[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 = 6739;
+  fra.me.line = 6740;
   fra.me.meth = LOCATE_parser___ReduceAction167___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:6741 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6742 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6743 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:6745 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGg, ID_TGg)) /*cast nullable TGg*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Assert failed", NULL, LOCATE_parser, 6745);
   }
-  /* ./parser//parser.nit:6747 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6747);
-  }
-  /* ./parser//parser.nit:6748 */
-  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6752 */
+  /* ./parser//parser.nit:6746 */
+  fra.me.REG[3] = NEW_AGgMethid_parser_prod___AGgMethid___init_aggmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6749 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6753 */
+  /* ./parser//parser.nit:6750 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction167____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6753);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6750);
   }
   REGB0 = ATTR_parser___ReduceAction167____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22471,7 +22467,7 @@ void parser___ReduceAction167___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos170]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6756;
+  fra.me.line = 6753;
   fra.me.meth = LOCATE_parser___ReduceAction167___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22479,7 +22475,7 @@ void parser___ReduceAction167___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6756 */
+  /* ./parser//parser.nit:6753 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction167____goto(fra.me.REG[1]) = REGB0;
@@ -22488,40 +22484,49 @@ void parser___ReduceAction167___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction168___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[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 = 6760;
+  fra.me.line = 6757;
   fra.me.meth = LOCATE_parser___ReduceAction168___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6762 */
+  /* ./parser//parser.nit:6759 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6763 */
+  /* ./parser//parser.nit:6760 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6761 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6763 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6763);
+  }
   /* ./parser//parser.nit:6765 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Assert failed", NULL, LOCATE_parser, 6765);
   }
   /* ./parser//parser.nit:6766 */
-  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6769 */
-  fra.me.REG[2] = fra.me.REG[3];
+  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:6770 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6771 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction168____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6770);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6771);
   }
   REGB0 = ATTR_parser___ReduceAction168____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22537,7 +22542,7 @@ void parser___ReduceAction168___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos171]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6773;
+  fra.me.line = 6774;
   fra.me.meth = LOCATE_parser___ReduceAction168___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22545,7 +22550,7 @@ void parser___ReduceAction168___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6773 */
+  /* ./parser//parser.nit:6774 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction168____goto(fra.me.REG[1]) = REGB0;
@@ -22554,49 +22559,40 @@ void parser___ReduceAction168___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction169___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[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 = 6777;
+  fra.me.line = 6778;
   fra.me.meth = LOCATE_parser___ReduceAction169___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:6779 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6780 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:6781 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:6783 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Assert failed", NULL, LOCATE_parser, 6783);
   }
-  /* ./parser//parser.nit:6785 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6785);
-  }
-  /* ./parser//parser.nit:6786 */
-  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6790 */
+  /* ./parser//parser.nit:6784 */
+  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6787 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6791 */
+  /* ./parser//parser.nit:6788 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction169____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6791);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6788);
   }
   REGB0 = ATTR_parser___ReduceAction169____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22612,7 +22608,7 @@ void parser___ReduceAction169___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos172]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6794;
+  fra.me.line = 6791;
   fra.me.meth = LOCATE_parser___ReduceAction169___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22620,7 +22616,7 @@ void parser___ReduceAction169___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6794 */
+  /* ./parser//parser.nit:6791 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction169____goto(fra.me.REG[1]) = REGB0;
@@ -22629,58 +22625,49 @@ void parser___ReduceAction169___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction170___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[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 = 6798;
+  fra.me.line = 6795;
   fra.me.meth = LOCATE_parser___ReduceAction170___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:6800 */
+  /* ./parser//parser.nit:6797 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6801 */
+  /* ./parser//parser.nit:6798 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6802 */
+  /* ./parser//parser.nit:6799 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6803 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6805 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6805);
-  }
-  /* ./parser//parser.nit:6807 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
+  /* ./parser//parser.nit:6801 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6807);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6801);
   }
-  /* ./parser//parser.nit:6809 */
+  /* ./parser//parser.nit:6803 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6809);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6803);
   }
-  /* ./parser//parser.nit:6810 */
-  fra.me.REG[3] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6815 */
+  /* ./parser//parser.nit:6804 */
+  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6808 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6816 */
+  /* ./parser//parser.nit:6809 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction170____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6816);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6809);
   }
   REGB0 = ATTR_parser___ReduceAction170____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22696,7 +22683,7 @@ void parser___ReduceAction170___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos173]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6819;
+  fra.me.line = 6812;
   fra.me.meth = LOCATE_parser___ReduceAction170___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22704,7 +22691,7 @@ void parser___ReduceAction170___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6819 */
+  /* ./parser//parser.nit:6812 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction170____goto(fra.me.REG[1]) = REGB0;
@@ -22713,58 +22700,58 @@ void parser___ReduceAction170___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction171___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[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 = 6823;
+  fra.me.line = 6816;
   fra.me.meth = LOCATE_parser___ReduceAction171___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:6825 */
+  /* ./parser//parser.nit:6818 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6826 */
+  /* ./parser//parser.nit:6819 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6827 */
+  /* ./parser//parser.nit:6820 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6828 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6829 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6831 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:6821 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6823 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6831);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6823);
   }
-  /* ./parser//parser.nit:6833 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:6825 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6825);
+  }
+  /* ./parser//parser.nit:6827 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6833);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6827);
   }
+  /* ./parser//parser.nit:6828 */
+  fra.me.REG[3] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6833 */
+  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:6834 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:6835 */
-  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:6840 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6841 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction171____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6841);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6834);
   }
   REGB0 = ATTR_parser___ReduceAction171____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22780,7 +22767,7 @@ void parser___ReduceAction171___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos174]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6844;
+  fra.me.line = 6837;
   fra.me.meth = LOCATE_parser___ReduceAction171___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22788,7 +22775,7 @@ void parser___ReduceAction171___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6844 */
+  /* ./parser//parser.nit:6837 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction171____goto(fra.me.REG[1]) = REGB0;
@@ -22797,15 +22784,15 @@ void parser___ReduceAction171___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction172___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[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 = 6848;
+  fra.me.line = 6841;
   fra.me.meth = LOCATE_parser___ReduceAction172___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -22813,54 +22800,42 @@ void parser___ReduceAction172___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:6850 */
+  /* ./parser//parser.nit:6843 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6851 */
+  /* ./parser//parser.nit:6844 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6852 */
+  /* ./parser//parser.nit:6845 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6853 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6854 */
+  /* ./parser//parser.nit:6846 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6847 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6855 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6857 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6857);
-  }
-  /* ./parser//parser.nit:6858 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[5]);
-  fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:6860 */
+  /* ./parser//parser.nit:6849 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6860);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6849);
   }
-  /* ./parser//parser.nit:6862 */
+  /* ./parser//parser.nit:6851 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6862);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6851);
   }
-  /* ./parser//parser.nit:6863 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
-  fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:6864 */
-  fra.me.REG[7] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[4], fra.me.REG[7]);
-  /* ./parser//parser.nit:6869 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:6870 */
+  /* ./parser//parser.nit:6852 */
+  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:6853 */
+  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
+  /* ./parser//parser.nit:6858 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:6859 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction172____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6870);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6859);
   }
   REGB0 = ATTR_parser___ReduceAction172____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22876,7 +22851,7 @@ void parser___ReduceAction172___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos175]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6873;
+  fra.me.line = 6862;
   fra.me.meth = LOCATE_parser___ReduceAction172___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22884,7 +22859,7 @@ void parser___ReduceAction172___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6873 */
+  /* ./parser//parser.nit:6862 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction172____goto(fra.me.REG[1]) = REGB0;
@@ -22893,48 +22868,70 @@ void parser___ReduceAction172___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction173___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[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6877;
+  fra.me.line = 6866;
   fra.me.meth = LOCATE_parser___ReduceAction173___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:6879 */
+  /* ./parser//parser.nit:6868 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6880 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6881 */
+  /* ./parser//parser.nit:6869 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6882 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6883 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6885 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:6870 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6871 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6872 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6873 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6875 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6885);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6875);
   }
-  /* ./parser//parser.nit:6886 */
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  /* ./parser//parser.nit:6891 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6892 */
+  /* ./parser//parser.nit:6876 */
+  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:6878 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6878);
+  }
+  /* ./parser//parser.nit:6880 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6880);
+  }
+  /* ./parser//parser.nit:6881 */
+  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:6882 */
+  fra.me.REG[7] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[4], fra.me.REG[7]);
+  /* ./parser//parser.nit:6887 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:6888 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction173____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6892);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6888);
   }
   REGB0 = ATTR_parser___ReduceAction173____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22950,7 +22947,7 @@ void parser___ReduceAction173___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos176]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6895;
+  fra.me.line = 6891;
   fra.me.meth = LOCATE_parser___ReduceAction173___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22958,7 +22955,7 @@ void parser___ReduceAction173___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6895 */
+  /* ./parser//parser.nit:6891 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction173____goto(fra.me.REG[1]) = REGB0;
@@ -22967,60 +22964,48 @@ void parser___ReduceAction173___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction174___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[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 = 6899;
+  fra.me.line = 6895;
   fra.me.meth = LOCATE_parser___ReduceAction174___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:6901 */
+  /* ./parser//parser.nit:6897 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6902 */
+  /* ./parser//parser.nit:6898 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6903 */
+  /* ./parser//parser.nit:6899 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6904 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6905 */
+  /* ./parser//parser.nit:6900 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6901 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6906 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6908 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6908);
-  }
-  /* ./parser//parser.nit:6909 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:6911 */
+  /* ./parser//parser.nit:6903 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6911);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6903);
   }
-  /* ./parser//parser.nit:6912 */
-  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[3], fra.me.REG[6]);
-  /* ./parser//parser.nit:6917 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6918 */
+  /* ./parser//parser.nit:6904 */
+  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
+  /* ./parser//parser.nit:6909 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:6910 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction174____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6918);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6910);
   }
   REGB0 = ATTR_parser___ReduceAction174____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23036,7 +23021,7 @@ void parser___ReduceAction174___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos177]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6921;
+  fra.me.line = 6913;
   fra.me.meth = LOCATE_parser___ReduceAction174___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23044,7 +23029,7 @@ void parser___ReduceAction174___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6921 */
+  /* ./parser//parser.nit:6913 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction174____goto(fra.me.REG[1]) = REGB0;
@@ -23053,49 +23038,60 @@ void parser___ReduceAction174___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction175___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 = 6925;
+  fra.me.line = 6917;
   fra.me.meth = LOCATE_parser___ReduceAction175___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:6927 */
+  /* ./parser//parser.nit:6919 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6928 */
+  /* ./parser//parser.nit:6920 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6929 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6930 */
+  /* ./parser//parser.nit:6921 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6922 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6923 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6932 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:6924 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6926 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6932);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6926);
   }
-  /* ./parser//parser.nit:6933 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:6934 */
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
-  /* ./parser//parser.nit:6939 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6940 */
+  /* ./parser//parser.nit:6927 */
+  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:6929 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6929);
+  }
+  /* ./parser//parser.nit:6930 */
+  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[3], fra.me.REG[6]);
+  /* ./parser//parser.nit:6935 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:6936 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction175____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6940);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6936);
   }
   REGB0 = ATTR_parser___ReduceAction175____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23111,7 +23107,7 @@ void parser___ReduceAction175___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos178]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6943;
+  fra.me.line = 6939;
   fra.me.meth = LOCATE_parser___ReduceAction175___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23119,7 +23115,7 @@ void parser___ReduceAction175___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6943 */
+  /* ./parser//parser.nit:6939 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction175____goto(fra.me.REG[1]) = REGB0;
@@ -23128,61 +23124,49 @@ void parser___ReduceAction175___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction176___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[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 = 6947;
+  fra.me.line = 6943;
   fra.me.meth = LOCATE_parser___ReduceAction176___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:6949 */
+  /* ./parser//parser.nit:6945 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6950 */
+  /* ./parser//parser.nit:6946 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6951 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6952 */
+  /* ./parser//parser.nit:6947 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6948 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6953 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6955 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6955);
-  }
-  /* ./parser//parser.nit:6956 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:6958 */
+  /* ./parser//parser.nit:6950 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6958);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6950);
   }
-  /* ./parser//parser.nit:6959 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:6960 */
-  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], NIT_NULL, fra.me.REG[6]);
-  /* ./parser//parser.nit:6965 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6966 */
+  /* ./parser//parser.nit:6951 */
+  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:6952 */
+  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
+  /* ./parser//parser.nit:6957 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:6958 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction176____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6966);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6958);
   }
   REGB0 = ATTR_parser___ReduceAction176____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23198,7 +23182,7 @@ void parser___ReduceAction176___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos179]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6969;
+  fra.me.line = 6961;
   fra.me.meth = LOCATE_parser___ReduceAction176___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23206,7 +23190,7 @@ void parser___ReduceAction176___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6969 */
+  /* ./parser//parser.nit:6961 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction176____goto(fra.me.REG[1]) = REGB0;
@@ -23215,39 +23199,61 @@ void parser___ReduceAction176___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction177___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[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 = 6973;
+  fra.me.line = 6965;
   fra.me.meth = LOCATE_parser___ReduceAction177___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:6975 */
+  /* ./parser//parser.nit:6967 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6976 */
+  /* ./parser//parser.nit:6968 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6969 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6970 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6971 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6973 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6973);
+  }
+  /* ./parser//parser.nit:6974 */
+  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:6976 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6976);
+  }
   /* ./parser//parser.nit:6977 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
+  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:6978 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6979 */
-  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
+  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], NIT_NULL, fra.me.REG[6]);
+  /* ./parser//parser.nit:6983 */
+  fra.me.REG[2] = fra.me.REG[6];
   /* ./parser//parser.nit:6984 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:6985 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction177____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6985);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6984);
   }
   REGB0 = ATTR_parser___ReduceAction177____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23263,7 +23269,7 @@ void parser___ReduceAction177___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos180]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6988;
+  fra.me.line = 6987;
   fra.me.meth = LOCATE_parser___ReduceAction177___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23271,7 +23277,7 @@ void parser___ReduceAction177___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6988 */
+  /* ./parser//parser.nit:6987 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction177____goto(fra.me.REG[1]) = REGB0;
@@ -23280,51 +23286,39 @@ void parser___ReduceAction177___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction178___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[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 = 6992;
+  fra.me.line = 6991;
   fra.me.meth = LOCATE_parser___ReduceAction178___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:6994 */
+  /* ./parser//parser.nit:6993 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6995 */
+  /* ./parser//parser.nit:6994 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6995 */
+  fra.me.REG[3] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:6996 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6997 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6998 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7000 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7000);
-  }
-  /* ./parser//parser.nit:7001 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
+  /* ./parser//parser.nit:6997 */
+  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
   /* ./parser//parser.nit:7002 */
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
-  /* ./parser//parser.nit:7007 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7008 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7003 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction178____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7008);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7003);
   }
   REGB0 = ATTR_parser___ReduceAction178____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23340,7 +23334,7 @@ void parser___ReduceAction178___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos181]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7011;
+  fra.me.line = 7006;
   fra.me.meth = LOCATE_parser___ReduceAction178___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23348,7 +23342,7 @@ void parser___ReduceAction178___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7011 */
+  /* ./parser//parser.nit:7006 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction178____goto(fra.me.REG[1]) = REGB0;
@@ -23357,32 +23351,46 @@ void parser___ReduceAction178___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction179___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[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 = 7015;
+  fra.me.line = 7010;
   fra.me.meth = LOCATE_parser___ReduceAction179___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:7017 */
+  /* ./parser//parser.nit:7012 */
   fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7013 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7014 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7015 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7016 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:7018 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7018);
+  }
   /* ./parser//parser.nit:7019 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  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:7020 */
-  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
+  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
   /* ./parser//parser.nit:7025 */
-  fra.me.REG[2] = fra.me.REG[4];
+  fra.me.REG[2] = fra.me.REG[5];
   /* ./parser//parser.nit:7026 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction179____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -23420,7 +23428,7 @@ void parser___ReduceAction179___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction180___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[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -23428,41 +23436,29 @@ void parser___ReduceAction180___action(val_t p0, val_t p1){
   fra.me.line = 7033;
   fra.me.meth = LOCATE_parser___ReduceAction180___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:7035 */
   fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7036 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:7037 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:7038 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7040 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7040);
-  }
-  /* ./parser//parser.nit:7041 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:7042 */
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
-  /* ./parser//parser.nit:7047 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7048 */
+  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
+  /* ./parser//parser.nit:7043 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7044 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction180____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7048);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7044);
   }
   REGB0 = ATTR_parser___ReduceAction180____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23478,7 +23474,7 @@ void parser___ReduceAction180___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos183]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7051;
+  fra.me.line = 7047;
   fra.me.meth = LOCATE_parser___ReduceAction180___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23486,7 +23482,7 @@ void parser___ReduceAction180___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7051 */
+  /* ./parser//parser.nit:7047 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction180____goto(fra.me.REG[1]) = REGB0;
@@ -23500,7 +23496,7 @@ void parser___ReduceAction181___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 = 7055;
+  fra.me.line = 7051;
   fra.me.meth = LOCATE_parser___ReduceAction181___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -23512,29 +23508,32 @@ void parser___ReduceAction181___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:7057 */
+  /* ./parser//parser.nit:7053 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7058 */
+  /* ./parser//parser.nit:7054 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7059 */
+  /* ./parser//parser.nit:7055 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7060 */
+  /* ./parser//parser.nit:7056 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7062 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:7058 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7062);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7058);
   }
-  /* ./parser//parser.nit:7063 */
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  /* ./parser//parser.nit:7068 */
+  /* ./parser//parser.nit:7059 */
+  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:7060 */
+  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
+  /* ./parser//parser.nit:7065 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7069 */
+  /* ./parser//parser.nit:7066 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction181____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7069);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7066);
   }
   REGB0 = ATTR_parser___ReduceAction181____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23550,7 +23549,7 @@ void parser___ReduceAction181___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos184]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7072;
+  fra.me.line = 7069;
   fra.me.meth = LOCATE_parser___ReduceAction181___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23558,7 +23557,7 @@ void parser___ReduceAction181___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7072 */
+  /* ./parser//parser.nit:7069 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction181____goto(fra.me.REG[1]) = REGB0;
@@ -23567,58 +23566,46 @@ void parser___ReduceAction181___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction182___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[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7076;
+  fra.me.line = 7073;
   fra.me.meth = LOCATE_parser___ReduceAction182___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:7078 */
+  /* ./parser//parser.nit:7075 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7079 */
+  /* ./parser//parser.nit:7076 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7080 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7081 */
+  /* ./parser//parser.nit:7077 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7078 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7082 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7084 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7084);
-  }
-  /* ./parser//parser.nit:7085 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:7087 */
+  /* ./parser//parser.nit:7080 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7087);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7080);
   }
-  /* ./parser//parser.nit:7088 */
-  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[3], fra.me.REG[6]);
-  /* ./parser//parser.nit:7093 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:7094 */
+  /* ./parser//parser.nit:7081 */
+  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
+  /* ./parser//parser.nit:7086 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7087 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction182____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7094);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7087);
   }
   REGB0 = ATTR_parser___ReduceAction182____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23634,7 +23621,7 @@ void parser___ReduceAction182___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos185]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7097;
+  fra.me.line = 7090;
   fra.me.meth = LOCATE_parser___ReduceAction182___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23642,7 +23629,7 @@ void parser___ReduceAction182___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7097 */
+  /* ./parser//parser.nit:7090 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction182____goto(fra.me.REG[1]) = REGB0;
@@ -23651,62 +23638,58 @@ void parser___ReduceAction182___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction183___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[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 = 7101;
+  fra.me.line = 7094;
   fra.me.meth = LOCATE_parser___ReduceAction183___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:7103 */
+  /* ./parser//parser.nit:7096 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7104 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7105 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7106 */
+  /* ./parser//parser.nit:7097 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7107 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7108 */
+  /* ./parser//parser.nit:7098 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7109 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7111 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser.nit:7099 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7100 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7102 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7102);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* ./parser//parser.nit:7103 */
+  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:7105 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7112 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7105);
   }
-  /* ./parser//parser.nit:7114 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7115 */
+  /* ./parser//parser.nit:7106 */
+  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[3], fra.me.REG[6]);
+  /* ./parser//parser.nit:7111 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:7112 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction183____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7115);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7112);
   }
   REGB0 = ATTR_parser___ReduceAction183____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23722,7 +23705,7 @@ void parser___ReduceAction183___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos186]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7118;
+  fra.me.line = 7115;
   fra.me.meth = LOCATE_parser___ReduceAction183___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23730,7 +23713,7 @@ void parser___ReduceAction183___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7118 */
+  /* ./parser//parser.nit:7115 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction183____goto(fra.me.REG[1]) = REGB0;
@@ -23739,74 +23722,62 @@ void parser___ReduceAction183___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction184___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[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 = 7122;
+  fra.me.line = 7119;
   fra.me.meth = LOCATE_parser___ReduceAction184___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:7124 */
+  /* ./parser//parser.nit:7121 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7125 */
+  /* ./parser//parser.nit:7122 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7126 */
+  /* ./parser//parser.nit:7123 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7127 */
+  /* ./parser//parser.nit:7124 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7128 */
+  /* ./parser//parser.nit:7125 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7126 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7127 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:7129 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7130 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7131 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7134 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7134);
-  }
-  /* ./parser//parser.nit:7135 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7136 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* ./parser//parser.nit:7130 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7138 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:7139 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7140 */
+  /* ./parser//parser.nit:7132 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7133 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction184____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7140);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7133);
   }
   REGB0 = ATTR_parser___ReduceAction184____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23822,7 +23793,7 @@ void parser___ReduceAction184___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos187]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7143;
+  fra.me.line = 7136;
   fra.me.meth = LOCATE_parser___ReduceAction184___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23830,7 +23801,7 @@ void parser___ReduceAction184___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7143 */
+  /* ./parser//parser.nit:7136 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction184____goto(fra.me.REG[1]) = REGB0;
@@ -23839,38 +23810,74 @@ void parser___ReduceAction184___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction185___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[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 = 7147;
+  fra.me.line = 7140;
   fra.me.meth = LOCATE_parser___ReduceAction185___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:7149 */
+  /* ./parser//parser.nit:7142 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7150 */
+  /* ./parser//parser.nit:7143 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7151 */
+  /* ./parser//parser.nit:7144 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7152 */
+  /* ./parser//parser.nit:7145 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7146 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7147 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7148 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7149 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7152 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7152);
+  }
   /* ./parser//parser.nit:7153 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7154 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7155 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:7154 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
+  /* ./parser//parser.nit:7156 */
+  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:7157 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7158 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction185____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7155);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7158);
   }
   REGB0 = ATTR_parser___ReduceAction185____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23886,7 +23893,7 @@ void parser___ReduceAction185___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos188]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7158;
+  fra.me.line = 7161;
   fra.me.meth = LOCATE_parser___ReduceAction185___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23894,7 +23901,7 @@ void parser___ReduceAction185___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7158 */
+  /* ./parser//parser.nit:7161 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction185____goto(fra.me.REG[1]) = REGB0;
@@ -23903,37 +23910,38 @@ void parser___ReduceAction185___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction186___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[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 = 7162;
+  fra.me.line = 7165;
   fra.me.meth = LOCATE_parser___ReduceAction186___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:7164 */
+  /* ./parser//parser.nit:7167 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7165 */
+  /* ./parser//parser.nit:7168 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7166 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7167 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7169 */
-  fra.me.REG[2] = fra.me.REG[3];
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7170 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7171 */
+  fra.me.REG[3] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7172 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7173 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction186____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7170);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7173);
   }
   REGB0 = ATTR_parser___ReduceAction186____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23949,7 +23957,7 @@ void parser___ReduceAction186___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos189]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7173;
+  fra.me.line = 7176;
   fra.me.meth = LOCATE_parser___ReduceAction186___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23957,7 +23965,7 @@ void parser___ReduceAction186___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7173 */
+  /* ./parser//parser.nit:7176 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction186____goto(fra.me.REG[1]) = REGB0;
@@ -23966,40 +23974,37 @@ void parser___ReduceAction186___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction187___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[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 = 7177;
+  fra.me.line = 7180;
   fra.me.meth = LOCATE_parser___ReduceAction187___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7179 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7180 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7182 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7182);
-  }
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7183 */
-  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:7188 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7184 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7185 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7187 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7189 */
+  /* ./parser//parser.nit:7188 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction187____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7189);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7188);
   }
   REGB0 = ATTR_parser___ReduceAction187____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24015,7 +24020,7 @@ void parser___ReduceAction187___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos190]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7192;
+  fra.me.line = 7191;
   fra.me.meth = LOCATE_parser___ReduceAction187___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24023,7 +24028,7 @@ void parser___ReduceAction187___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7192 */
+  /* ./parser//parser.nit:7191 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction187____goto(fra.me.REG[1]) = REGB0;
@@ -24032,49 +24037,40 @@ void parser___ReduceAction187___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction188___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[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 = 7196;
+  fra.me.line = 7195;
   fra.me.meth = LOCATE_parser___ReduceAction188___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:7198 */
+  /* ./parser//parser.nit:7197 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7199 */
+  /* ./parser//parser.nit:7198 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7200 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7202 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7202);
-  }
-  /* ./parser//parser.nit:7204 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7204);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7200);
   }
-  /* ./parser//parser.nit:7205 */
-  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7210 */
+  /* ./parser//parser.nit:7201 */
+  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:7206 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7211 */
+  /* ./parser//parser.nit:7207 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction188____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7211);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7207);
   }
   REGB0 = ATTR_parser___ReduceAction188____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24090,7 +24086,7 @@ void parser___ReduceAction188___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos191]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7214;
+  fra.me.line = 7210;
   fra.me.meth = LOCATE_parser___ReduceAction188___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24098,7 +24094,7 @@ void parser___ReduceAction188___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7214 */
+  /* ./parser//parser.nit:7210 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction188____goto(fra.me.REG[1]) = REGB0;
@@ -24107,58 +24103,49 @@ void parser___ReduceAction188___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction189___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[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 = 7218;
+  fra.me.line = 7214;
   fra.me.meth = LOCATE_parser___ReduceAction189___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:7220 */
+  /* ./parser//parser.nit:7216 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7221 */
+  /* ./parser//parser.nit:7217 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7222 */
+  /* ./parser//parser.nit:7218 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7223 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7225 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7225);
-  }
-  /* ./parser//parser.nit:7227 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:7220 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7227);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7220);
   }
-  /* ./parser//parser.nit:7229 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TDotdotdot, ID_TDotdotdot)) /*cast nullable TDotdotdot*/;
+  /* ./parser//parser.nit:7222 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7229);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7222);
   }
-  /* ./parser//parser.nit:7230 */
-  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7235 */
+  /* ./parser//parser.nit:7223 */
+  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:7228 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7236 */
+  /* ./parser//parser.nit:7229 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction189____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7236);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7229);
   }
   REGB0 = ATTR_parser___ReduceAction189____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24174,7 +24161,7 @@ void parser___ReduceAction189___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos192]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7239;
+  fra.me.line = 7232;
   fra.me.meth = LOCATE_parser___ReduceAction189___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24182,7 +24169,7 @@ void parser___ReduceAction189___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7239 */
+  /* ./parser//parser.nit:7232 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction189____goto(fra.me.REG[1]) = REGB0;
@@ -24191,46 +24178,58 @@ void parser___ReduceAction189___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction190___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[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 = 7243;
+  fra.me.line = 7236;
   fra.me.meth = LOCATE_parser___ReduceAction190___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:7245 */
+  /* ./parser//parser.nit:7238 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7246 */
+  /* ./parser//parser.nit:7239 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7247 */
+  /* ./parser//parser.nit:7240 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7248 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7250 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:7241 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7243 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7250);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7243);
   }
-  /* ./parser//parser.nit:7251 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:7252 */
-  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7245 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7245);
+  }
+  /* ./parser//parser.nit:7247 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TDotdotdot, ID_TDotdotdot)) /*cast nullable TDotdotdot*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7247);
+  }
+  /* ./parser//parser.nit:7248 */
+  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:7253 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7254 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction190____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7253);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7254);
   }
   REGB0 = ATTR_parser___ReduceAction190____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24246,7 +24245,7 @@ void parser___ReduceAction190___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos193]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7256;
+  fra.me.line = 7257;
   fra.me.meth = LOCATE_parser___ReduceAction190___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24254,7 +24253,7 @@ void parser___ReduceAction190___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7256 */
+  /* ./parser//parser.nit:7257 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction190____goto(fra.me.REG[1]) = REGB0;
@@ -24263,60 +24262,46 @@ void parser___ReduceAction190___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction191___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[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 = 7260;
+  fra.me.line = 7261;
   fra.me.meth = LOCATE_parser___ReduceAction191___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:7262 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7263 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7264 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7265 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7266 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:7268 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Assert failed", NULL, LOCATE_parser, 7268);
   }
+  /* ./parser//parser.nit:7269 */
+  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:7270 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7270);
-  }
-  /* ./parser//parser.nit:7272 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7272);
-  }
-  /* ./parser//parser.nit:7273 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7280 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7281 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7271 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction191____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7281);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7271);
   }
   REGB0 = ATTR_parser___ReduceAction191____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24332,7 +24317,7 @@ void parser___ReduceAction191___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos194]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7284;
+  fra.me.line = 7274;
   fra.me.meth = LOCATE_parser___ReduceAction191___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24340,7 +24325,7 @@ void parser___ReduceAction191___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7284 */
+  /* ./parser//parser.nit:7274 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction191____goto(fra.me.REG[1]) = REGB0;
@@ -24349,69 +24334,60 @@ void parser___ReduceAction191___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction192___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[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 = 7288;
+  fra.me.line = 7278;
   fra.me.meth = LOCATE_parser___ReduceAction192___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:7290 */
+  /* ./parser//parser.nit:7280 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7291 */
+  /* ./parser//parser.nit:7281 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7292 */
+  /* ./parser//parser.nit:7282 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7293 */
+  /* ./parser//parser.nit:7283 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7294 */
+  /* ./parser//parser.nit:7284 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7295 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7297 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7297);
-  }
-  /* ./parser//parser.nit:7299 */
+  /* ./parser//parser.nit:7286 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7299);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7286);
   }
-  /* ./parser//parser.nit:7301 */
+  /* ./parser//parser.nit:7288 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7301);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7288);
   }
-  /* ./parser//parser.nit:7303 */
+  /* ./parser//parser.nit:7290 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7303);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7290);
   }
-  /* ./parser//parser.nit:7304 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7311 */
+  /* ./parser//parser.nit:7291 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:7298 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7312 */
+  /* ./parser//parser.nit:7299 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction192____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7312);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7299);
   }
   REGB0 = ATTR_parser___ReduceAction192____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24427,7 +24403,7 @@ void parser___ReduceAction192___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos195]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7315;
+  fra.me.line = 7302;
   fra.me.meth = LOCATE_parser___ReduceAction192___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24435,7 +24411,7 @@ void parser___ReduceAction192___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7315 */
+  /* ./parser//parser.nit:7302 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction192____goto(fra.me.REG[1]) = REGB0;
@@ -24449,7 +24425,7 @@ void parser___ReduceAction193___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 = 7319;
+  fra.me.line = 7306;
   fra.me.meth = LOCATE_parser___ReduceAction193___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -24462,53 +24438,51 @@ void parser___ReduceAction193___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7321 */
+  /* ./parser//parser.nit:7308 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7322 */
+  /* ./parser//parser.nit:7309 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7323 */
+  /* ./parser//parser.nit:7310 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7324 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7325 */
+  /* ./parser//parser.nit:7311 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7326 */
+  /* ./parser//parser.nit:7312 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7327 */
+  /* ./parser//parser.nit:7313 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7329 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* ./parser//parser.nit:7315 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7329);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7315);
   }
-  /* ./parser//parser.nit:7331 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:7317 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7331);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7317);
   }
-  /* ./parser//parser.nit:7333 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:7319 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7333);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7319);
   }
-  /* ./parser//parser.nit:7335 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:7321 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7335);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7321);
   }
-  /* ./parser//parser.nit:7336 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7343 */
+  /* ./parser//parser.nit:7322 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:7329 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7344 */
+  /* ./parser//parser.nit:7330 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction193____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7344);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7330);
   }
   REGB0 = ATTR_parser___ReduceAction193____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24524,7 +24498,7 @@ void parser___ReduceAction193___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos196]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7347;
+  fra.me.line = 7333;
   fra.me.meth = LOCATE_parser___ReduceAction193___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24532,7 +24506,7 @@ void parser___ReduceAction193___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7347 */
+  /* ./parser//parser.nit:7333 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction193____goto(fra.me.REG[1]) = REGB0;
@@ -24541,15 +24515,15 @@ void parser___ReduceAction193___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction194___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[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 = 7351;
+  fra.me.line = 7337;
   fra.me.meth = LOCATE_parser___ReduceAction194___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;
@@ -24557,64 +24531,55 @@ void parser___ReduceAction194___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:7353 */
+  /* ./parser//parser.nit:7339 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7354 */
+  /* ./parser//parser.nit:7340 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7355 */
+  /* ./parser//parser.nit:7341 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7356 */
+  /* ./parser//parser.nit:7342 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7357 */
+  /* ./parser//parser.nit:7343 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7358 */
+  /* ./parser//parser.nit:7344 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7359 */
+  /* ./parser//parser.nit:7345 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7360 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7362 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7362);
-  }
-  /* ./parser//parser.nit:7364 */
+  /* ./parser//parser.nit:7347 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7364);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7347);
   }
-  /* ./parser//parser.nit:7366 */
+  /* ./parser//parser.nit:7349 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7366);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7349);
   }
-  /* ./parser//parser.nit:7368 */
+  /* ./parser//parser.nit:7351 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7368);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7351);
   }
-  /* ./parser//parser.nit:7370 */
+  /* ./parser//parser.nit:7353 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7370);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7353);
   }
-  /* ./parser//parser.nit:7371 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7378 */
+  /* ./parser//parser.nit:7354 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7361 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7379 */
+  /* ./parser//parser.nit:7362 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction194____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7379);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7362);
   }
   REGB0 = ATTR_parser___ReduceAction194____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24630,7 +24595,7 @@ void parser___ReduceAction194___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos197]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7382;
+  fra.me.line = 7365;
   fra.me.meth = LOCATE_parser___ReduceAction194___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24638,7 +24603,7 @@ void parser___ReduceAction194___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7382 */
+  /* ./parser//parser.nit:7365 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction194____goto(fra.me.REG[1]) = REGB0;
@@ -24647,15 +24612,15 @@ void parser___ReduceAction194___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction195___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[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7386;
+  fra.me.line = 7369;
   fra.me.meth = LOCATE_parser___ReduceAction195___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24663,57 +24628,64 @@ void parser___ReduceAction195___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:7388 */
+  /* ./parser//parser.nit:7371 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7389 */
+  /* ./parser//parser.nit:7372 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7390 */
+  /* ./parser//parser.nit:7373 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7391 */
+  /* ./parser//parser.nit:7374 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7392 */
+  /* ./parser//parser.nit:7375 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7393 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7394 */
+  /* ./parser//parser.nit:7376 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7395 */
+  /* ./parser//parser.nit:7377 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7397 */
+  /* ./parser//parser.nit:7378 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7380 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7380);
+  }
+  /* ./parser//parser.nit:7382 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7397);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7382);
   }
-  /* ./parser//parser.nit:7399 */
+  /* ./parser//parser.nit:7384 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7399);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7384);
   }
-  /* ./parser//parser.nit:7401 */
+  /* ./parser//parser.nit:7386 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7401);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7386);
   }
-  /* ./parser//parser.nit:7403 */
+  /* ./parser//parser.nit:7388 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7403);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7388);
   }
-  /* ./parser//parser.nit:7404 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7411 */
+  /* ./parser//parser.nit:7389 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7396 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7412 */
+  /* ./parser//parser.nit:7397 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction195____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7412);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7397);
   }
   REGB0 = ATTR_parser___ReduceAction195____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24729,7 +24701,7 @@ void parser___ReduceAction195___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos198]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7415;
+  fra.me.line = 7400;
   fra.me.meth = LOCATE_parser___ReduceAction195___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24737,7 +24709,7 @@ void parser___ReduceAction195___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7415 */
+  /* ./parser//parser.nit:7400 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction195____goto(fra.me.REG[1]) = REGB0;
@@ -24746,15 +24718,15 @@ void parser___ReduceAction195___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction196___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[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 = 7419;
+  fra.me.line = 7404;
   fra.me.meth = LOCATE_parser___ReduceAction196___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;
@@ -24762,66 +24734,57 @@ void parser___ReduceAction196___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:7421 */
+  /* ./parser//parser.nit:7406 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7422 */
+  /* ./parser//parser.nit:7407 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7423 */
+  /* ./parser//parser.nit:7408 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7424 */
+  /* ./parser//parser.nit:7409 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7425 */
+  /* ./parser//parser.nit:7410 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7426 */
+  /* ./parser//parser.nit:7411 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7427 */
+  /* ./parser//parser.nit:7412 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7428 */
+  /* ./parser//parser.nit:7413 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7429 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7431 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7431);
-  }
-  /* ./parser//parser.nit:7433 */
+  /* ./parser//parser.nit:7415 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7433);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7415);
   }
-  /* ./parser//parser.nit:7435 */
+  /* ./parser//parser.nit:7417 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7435);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7417);
   }
-  /* ./parser//parser.nit:7437 */
+  /* ./parser//parser.nit:7419 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7437);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7419);
   }
-  /* ./parser//parser.nit:7439 */
+  /* ./parser//parser.nit:7421 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7439);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7421);
   }
-  /* ./parser//parser.nit:7440 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7447 */
+  /* ./parser//parser.nit:7422 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7429 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7448 */
+  /* ./parser//parser.nit:7430 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction196____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7448);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7430);
   }
   REGB0 = ATTR_parser___ReduceAction196____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24837,7 +24800,7 @@ void parser___ReduceAction196___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos199]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7451;
+  fra.me.line = 7433;
   fra.me.meth = LOCATE_parser___ReduceAction196___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24845,7 +24808,7 @@ void parser___ReduceAction196___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7451 */
+  /* ./parser//parser.nit:7433 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction196____goto(fra.me.REG[1]) = REGB0;
@@ -24854,33 +24817,75 @@ void parser___ReduceAction196___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction197___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 = 7455;
+  fra.me.line = 7437;
   fra.me.meth = LOCATE_parser___ReduceAction197___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:7457 */
+  /* ./parser//parser.nit:7439 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7458 */
+  /* ./parser//parser.nit:7440 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7441 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7460 */
+  /* ./parser//parser.nit:7442 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7443 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7444 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7445 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7446 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7447 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7449 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7449);
+  }
+  /* ./parser//parser.nit:7451 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7451);
+  }
+  /* ./parser//parser.nit:7453 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7453);
+  }
+  /* ./parser//parser.nit:7455 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7455);
+  }
+  /* ./parser//parser.nit:7457 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7460);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7457);
   }
-  /* ./parser//parser.nit:7461 */
-  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:7458 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:7465 */
   fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:7466 */
@@ -24920,73 +24925,40 @@ void parser___ReduceAction197___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction198___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[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
   fra.me.line = 7473;
   fra.me.meth = LOCATE_parser___ReduceAction198___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:7475 */
   fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7476 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7477 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7478 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7479 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7481 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7481);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7478);
   }
+  /* ./parser//parser.nit:7479 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(NIT_NULL, fra.me.REG[3]);
   /* ./parser//parser.nit:7483 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExternCall, ID_AExternCall)) /*cast nullable AExternCall*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7483);
-  }
+  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:7484 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7485 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  /* ./parser//parser.nit:7487 */
-  fra.me.REG[5] = NEW_AExternCalls_parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:7491 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7492 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction198____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7492);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7484);
   }
   REGB0 = ATTR_parser___ReduceAction198____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25002,7 +24974,7 @@ void parser___ReduceAction198___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos201]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7495;
+  fra.me.line = 7487;
   fra.me.meth = LOCATE_parser___ReduceAction198___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25010,7 +24982,7 @@ void parser___ReduceAction198___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7495 */
+  /* ./parser//parser.nit:7487 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction198____goto(fra.me.REG[1]) = REGB0;
@@ -25019,85 +24991,73 @@ void parser___ReduceAction198___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction199___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[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 = 7499;
+  fra.me.line = 7491;
   fra.me.meth = LOCATE_parser___ReduceAction199___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7501 */
+  /* ./parser//parser.nit:7493 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7502 */
+  /* ./parser//parser.nit:7494 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7503 */
+  /* ./parser//parser.nit:7495 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7504 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7505 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7506 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7508 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7508);
-  }
-  /* ./parser//parser.nit:7510 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExternCall, ID_AExternCall)) /*cast nullable AExternCall*/;
+  /* ./parser//parser.nit:7496 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7497 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7499 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7510);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7499);
   }
-  /* ./parser//parser.nit:7512 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:7501 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExternCall, ID_AExternCall)) /*cast nullable AExternCall*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7512);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7501);
   }
-  /* ./parser//parser.nit:7513 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser.nit:7502 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7514 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
+    /* ./parser//parser.nit:7503 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7516 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:7517 */
-  fra.me.REG[6] = NEW_AExternCalls_parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:7521 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:7522 */
+  /* ./parser//parser.nit:7505 */
+  fra.me.REG[5] = NEW_AExternCalls_parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[4], fra.me.REG[5]);
+  /* ./parser//parser.nit:7509 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7510 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction199____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7522);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7510);
   }
   REGB0 = ATTR_parser___ReduceAction199____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25113,7 +25073,7 @@ void parser___ReduceAction199___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos202]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7525;
+  fra.me.line = 7513;
   fra.me.meth = LOCATE_parser___ReduceAction199___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25121,7 +25081,7 @@ void parser___ReduceAction199___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7525 */
+  /* ./parser//parser.nit:7513 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction199____goto(fra.me.REG[1]) = REGB0;
@@ -25130,37 +25090,85 @@ void parser___ReduceAction199___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction200___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[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 = 7529;
+  fra.me.line = 7517;
   fra.me.meth = LOCATE_parser___ReduceAction200___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:7531 */
+  /* ./parser//parser.nit:7519 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7532 */
+  /* ./parser//parser.nit:7520 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7533 */
+  /* ./parser//parser.nit:7521 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7522 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7523 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7524 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7526 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7526);
+  }
+  /* ./parser//parser.nit:7528 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExternCall, ID_AExternCall)) /*cast nullable AExternCall*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7528);
+  }
+  /* ./parser//parser.nit:7530 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7530);
+  }
+  /* ./parser//parser.nit:7531 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:7532 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
+  }
   /* ./parser//parser.nit:7534 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7536 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7537 */
+  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:7535 */
+  fra.me.REG[6] = NEW_AExternCalls_parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[5], fra.me.REG[6]);
+  /* ./parser//parser.nit:7539 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:7540 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction200____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7537);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7540);
   }
   REGB0 = ATTR_parser___ReduceAction200____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25176,7 +25184,7 @@ void parser___ReduceAction200___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos203]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7540;
+  fra.me.line = 7543;
   fra.me.meth = LOCATE_parser___ReduceAction200___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25184,7 +25192,7 @@ void parser___ReduceAction200___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7540 */
+  /* ./parser//parser.nit:7543 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction200____goto(fra.me.REG[1]) = REGB0;
@@ -25193,32 +25201,37 @@ void parser___ReduceAction200___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction201___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[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 = 7544;
+  fra.me.line = 7547;
   fra.me.meth = LOCATE_parser___ReduceAction201___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7546 */
+  /* ./parser//parser.nit:7549 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7547 */
+  /* ./parser//parser.nit:7550 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7549 */
+  /* ./parser//parser.nit:7551 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7552 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7554 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7550 */
+  /* ./parser//parser.nit:7555 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction201____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7550);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7555);
   }
   REGB0 = ATTR_parser___ReduceAction201____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25234,7 +25247,7 @@ void parser___ReduceAction201___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos204]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7553;
+  fra.me.line = 7558;
   fra.me.meth = LOCATE_parser___ReduceAction201___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25242,7 +25255,7 @@ void parser___ReduceAction201___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7553 */
+  /* ./parser//parser.nit:7558 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction201____goto(fra.me.REG[1]) = REGB0;
@@ -25250,14 +25263,14 @@ void parser___ReduceAction201___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos204] = 1;
   return;
 }
-void parser___ReduceAction203___action(val_t p0, val_t p1){
+void parser___ReduceAction202___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7557;
-  fra.me.meth = LOCATE_parser___ReduceAction203___action;
+  fra.me.line = 7562;
+  fra.me.meth = LOCATE_parser___ReduceAction202___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -25266,52 +25279,44 @@ 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:7559 */
+  /* ./parser//parser.nit:7564 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7560 */
+  /* ./parser//parser.nit:7565 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7562 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7562);
-  }
-  /* ./parser//parser.nit:7563 */
-  fra.me.REG[3] = NEW_ASuperExternCall_parser_prod___ASuperExternCall___init_asuperexterncall(fra.me.REG[3]);
-  /* ./parser//parser.nit:7566 */
-  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:7567 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction203____goto(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7568 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction202____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7567);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7568);
   }
-  REGB0 = ATTR_parser___ReduceAction203____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction202____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction203___init(val_t p0, val_t p1, int* init_table){
-  int itpos205 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction203].i;
+void parser___ReduceAction202___init(val_t p0, val_t p1, int* init_table){
+  int itpos205 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction202].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos205]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7570;
-  fra.me.meth = LOCATE_parser___ReduceAction203___init;
+  fra.me.line = 7571;
+  fra.me.meth = LOCATE_parser___ReduceAction202___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7570 */
+  /* ./parser//parser.nit:7571 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction203____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction202____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos205] = 1;
   return;
@@ -25322,7 +25327,7 @@ void parser___ReduceAction204___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 = 7574;
+  fra.me.line = 7575;
   fra.me.meth = LOCATE_parser___ReduceAction204___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25332,25 +25337,25 @@ 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:7576 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7577 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7578 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7579 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* ./parser//parser.nit:7580 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7579);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7580);
   }
-  /* ./parser//parser.nit:7580 */
-  fra.me.REG[3] = NEW_ALocalPropExternCall_parser_prod___ALocalPropExternCall___init_alocalpropexterncall(fra.me.REG[3]);
-  /* ./parser//parser.nit:7583 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7581 */
+  fra.me.REG[3] = NEW_ASuperExternCall_parser_prod___ASuperExternCall___init_asuperexterncall(fra.me.REG[3]);
   /* ./parser//parser.nit:7584 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7585 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction204____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7584);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7585);
   }
   REGB0 = ATTR_parser___ReduceAction204____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25366,7 +25371,7 @@ void parser___ReduceAction204___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos206]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7587;
+  fra.me.line = 7588;
   fra.me.meth = LOCATE_parser___ReduceAction204___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25374,7 +25379,7 @@ void parser___ReduceAction204___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7587 */
+  /* ./parser//parser.nit:7588 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction204____goto(fra.me.REG[1]) = REGB0;
@@ -25383,58 +25388,40 @@ void parser___ReduceAction204___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction205___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[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 = 7591;
+  fra.me.line = 7592;
   fra.me.meth = LOCATE_parser___ReduceAction205___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:7593 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7594 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7595 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7596 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7598 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7598);
-  }
-  /* ./parser//parser.nit:7600 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TQuad, ID_TQuad)) /*cast nullable TQuad*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7600);
-  }
-  /* ./parser//parser.nit:7602 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7597 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7602);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7597);
   }
-  /* ./parser//parser.nit:7603 */
-  fra.me.REG[3] = NEW_AFullPropExternCall_parser_prod___AFullPropExternCall___init_afullpropexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7608 */
+  /* ./parser//parser.nit:7598 */
+  fra.me.REG[3] = NEW_ALocalPropExternCall_parser_prod___ALocalPropExternCall___init_alocalpropexterncall(fra.me.REG[3]);
+  /* ./parser//parser.nit:7601 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7609 */
+  /* ./parser//parser.nit:7602 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction205____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7609);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7602);
   }
   REGB0 = ATTR_parser___ReduceAction205____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25450,7 +25437,7 @@ void parser___ReduceAction205___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos207]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7612;
+  fra.me.line = 7605;
   fra.me.meth = LOCATE_parser___ReduceAction205___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25458,7 +25445,7 @@ void parser___ReduceAction205___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7612 */
+  /* ./parser//parser.nit:7605 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction205____goto(fra.me.REG[1]) = REGB0;
@@ -25467,40 +25454,58 @@ void parser___ReduceAction205___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction206___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[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 = 7616;
+  fra.me.line = 7609;
   fra.me.meth = LOCATE_parser___ReduceAction206___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:7618 */
+  /* ./parser//parser.nit:7611 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7619 */
+  /* ./parser//parser.nit:7612 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7621 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* ./parser//parser.nit:7613 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7614 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7616 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7621);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7616);
   }
-  /* ./parser//parser.nit:7622 */
-  fra.me.REG[3] = NEW_AInitPropExternCall_parser_prod___AInitPropExternCall___init_ainitpropexterncall(fra.me.REG[3]);
-  /* ./parser//parser.nit:7625 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7618 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TQuad, ID_TQuad)) /*cast nullable TQuad*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7618);
+  }
+  /* ./parser//parser.nit:7620 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7620);
+  }
+  /* ./parser//parser.nit:7621 */
+  fra.me.REG[3] = NEW_AFullPropExternCall_parser_prod___AFullPropExternCall___init_afullpropexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:7626 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7627 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction206____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7626);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7627);
   }
   REGB0 = ATTR_parser___ReduceAction206____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25516,7 +25521,7 @@ void parser___ReduceAction206___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos208]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7629;
+  fra.me.line = 7630;
   fra.me.meth = LOCATE_parser___ReduceAction206___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25524,7 +25529,7 @@ void parser___ReduceAction206___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7629 */
+  /* ./parser//parser.nit:7630 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction206____goto(fra.me.REG[1]) = REGB0;
@@ -25533,68 +25538,40 @@ void parser___ReduceAction206___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction207___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[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 = 7633;
+  fra.me.line = 7634;
   fra.me.meth = LOCATE_parser___ReduceAction207___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:7635 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7636 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7637 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7638 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7639 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7640 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7641 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7642 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7643 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7645 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7645);
-  }
-  /* ./parser//parser.nit:7647 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7647);
-  }
-  /* ./parser//parser.nit:7649 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7649);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7639);
   }
-  /* ./parser//parser.nit:7650 */
-  fra.me.REG[3] = NEW_ACastAsExternCall_parser_prod___ACastAsExternCall___init_acastasexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7655 */
+  /* ./parser//parser.nit:7640 */
+  fra.me.REG[3] = NEW_AInitPropExternCall_parser_prod___AInitPropExternCall___init_ainitpropexterncall(fra.me.REG[3]);
+  /* ./parser//parser.nit:7643 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7656 */
+  /* ./parser//parser.nit:7644 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction207____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7656);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7644);
   }
   REGB0 = ATTR_parser___ReduceAction207____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25610,7 +25587,7 @@ void parser___ReduceAction207___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos209]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7659;
+  fra.me.line = 7647;
   fra.me.meth = LOCATE_parser___ReduceAction207___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25618,7 +25595,7 @@ void parser___ReduceAction207___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7659 */
+  /* ./parser//parser.nit:7647 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction207____goto(fra.me.REG[1]) = REGB0;
@@ -25632,7 +25609,7 @@ void parser___ReduceAction208___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 = 7663;
+  fra.me.line = 7651;
   fra.me.meth = LOCATE_parser___ReduceAction208___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -25644,43 +25621,51 @@ void parser___ReduceAction208___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7665 */
+  /* ./parser//parser.nit:7653 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7666 */
+  /* ./parser//parser.nit:7654 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7667 */
+  /* ./parser//parser.nit:7655 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7656 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7657 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7668 */
+  /* ./parser//parser.nit:7658 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7659 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7660 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7669 */
+  /* ./parser//parser.nit:7661 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7671 */
+  /* ./parser//parser.nit:7663 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7671);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7663);
   }
-  /* ./parser//parser.nit:7673 */
+  /* ./parser//parser.nit:7665 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7673);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7665);
   }
-  /* ./parser//parser.nit:7675 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
+  /* ./parser//parser.nit:7667 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7675);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7667);
   }
-  /* ./parser//parser.nit:7676 */
-  fra.me.REG[3] = NEW_AAsNullableExternCall_parser_prod___AAsNullableExternCall___init_aasnullableexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7681 */
+  /* ./parser//parser.nit:7668 */
+  fra.me.REG[3] = NEW_ACastAsExternCall_parser_prod___ACastAsExternCall___init_acastasexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7673 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7682 */
+  /* ./parser//parser.nit:7674 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction208____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7682);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7674);
   }
   REGB0 = ATTR_parser___ReduceAction208____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25696,7 +25681,7 @@ void parser___ReduceAction208___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos210]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7685;
+  fra.me.line = 7677;
   fra.me.meth = LOCATE_parser___ReduceAction208___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25704,7 +25689,7 @@ void parser___ReduceAction208___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7685 */
+  /* ./parser//parser.nit:7677 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction208____goto(fra.me.REG[1]) = REGB0;
@@ -25713,71 +25698,60 @@ void parser___ReduceAction208___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction209___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[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 = 7689;
+  fra.me.line = 7681;
   fra.me.meth = LOCATE_parser___ReduceAction209___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7691 */
+  /* ./parser//parser.nit:7683 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7692 */
+  /* ./parser//parser.nit:7684 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7693 */
+  /* ./parser//parser.nit:7685 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7694 */
+  /* ./parser//parser.nit:7686 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7695 */
+  /* ./parser//parser.nit:7687 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7696 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7697 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7699 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7699);
-  }
-  /* ./parser//parser.nit:7701 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
+  /* ./parser//parser.nit:7689 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7701);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7689);
   }
-  /* ./parser//parser.nit:7703 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
+  /* ./parser//parser.nit:7691 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7703);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7691);
   }
-  /* ./parser//parser.nit:7705 */
+  /* ./parser//parser.nit:7693 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7705);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7693);
   }
-  /* ./parser//parser.nit:7706 */
-  fra.me.REG[3] = NEW_AAsNotNullableExternCall_parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7712 */
+  /* ./parser//parser.nit:7694 */
+  fra.me.REG[3] = NEW_AAsNullableExternCall_parser_prod___AAsNullableExternCall___init_aasnullableexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7699 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7713 */
+  /* ./parser//parser.nit:7700 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction209____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7713);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7700);
   }
   REGB0 = ATTR_parser___ReduceAction209____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25793,7 +25767,7 @@ void parser___ReduceAction209___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos211]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7716;
+  fra.me.line = 7703;
   fra.me.meth = LOCATE_parser___ReduceAction209___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25801,7 +25775,7 @@ void parser___ReduceAction209___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7716 */
+  /* ./parser//parser.nit:7703 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction209____goto(fra.me.REG[1]) = REGB0;
@@ -25810,43 +25784,71 @@ void parser___ReduceAction209___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction210___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[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 = 7720;
+  fra.me.line = 7707;
   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:7722 */
+  /* ./parser//parser.nit:7709 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7723 */
+  /* ./parser//parser.nit:7710 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7724 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7726 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* ./parser//parser.nit:7711 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7712 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7713 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7714 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7715 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7717 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7726);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7717);
   }
-  /* ./parser//parser.nit:7727 */
-  fra.me.REG[4] = NEW_AType_parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  /* ./parser//parser.nit:7732 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7733 */
+  /* ./parser//parser.nit:7719 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7719);
+  }
+  /* ./parser//parser.nit:7721 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7721);
+  }
+  /* ./parser//parser.nit:7723 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7723);
+  }
+  /* ./parser//parser.nit:7724 */
+  fra.me.REG[3] = NEW_AAsNotNullableExternCall_parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7730 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7731 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction210____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7733);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7731);
   }
   REGB0 = ATTR_parser___ReduceAction210____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25862,7 +25864,7 @@ void parser___ReduceAction210___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos212]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7736;
+  fra.me.line = 7734;
   fra.me.meth = LOCATE_parser___ReduceAction210___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25870,7 +25872,7 @@ void parser___ReduceAction210___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7736 */
+  /* ./parser//parser.nit:7734 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction210____goto(fra.me.REG[1]) = REGB0;
@@ -25879,52 +25881,43 @@ void parser___ReduceAction210___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction211___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[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 = 7740;
+  fra.me.line = 7738;
   fra.me.meth = LOCATE_parser___ReduceAction211___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:7742 */
+  /* ./parser//parser.nit:7740 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7743 */
+  /* ./parser//parser.nit:7741 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7742 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:7744 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7745 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7747 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7747);
-  }
-  /* ./parser//parser.nit:7749 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7749);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7744);
   }
+  /* ./parser//parser.nit:7745 */
+  fra.me.REG[4] = NEW_AType_parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
   /* ./parser//parser.nit:7750 */
-  fra.me.REG[5] = NEW_AType_parser_prod___AType___init_atype(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  /* ./parser//parser.nit:7755 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7756 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7751 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction211____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7756);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7751);
   }
   REGB0 = ATTR_parser___ReduceAction211____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25940,7 +25933,7 @@ void parser___ReduceAction211___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos213]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7759;
+  fra.me.line = 7754;
   fra.me.meth = LOCATE_parser___ReduceAction211___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25948,7 +25941,7 @@ void parser___ReduceAction211___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7759 */
+  /* ./parser//parser.nit:7754 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction211____goto(fra.me.REG[1]) = REGB0;
@@ -25962,7 +25955,7 @@ void parser___ReduceAction212___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 = 7763;
+  fra.me.line = 7758;
   fra.me.meth = LOCATE_parser___ReduceAction212___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -25974,46 +25967,35 @@ void parser___ReduceAction212___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7765 */
+  /* ./parser//parser.nit:7760 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7766 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7767 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7768 */
+  /* ./parser//parser.nit:7761 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7769 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7770 */
+  /* ./parser//parser.nit:7762 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7771 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7772 */
+  /* ./parser//parser.nit:7763 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7774 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* ./parser//parser.nit:7765 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7774);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7765);
   }
-  /* ./parser//parser.nit:7776 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:7767 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7776);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7767);
   }
-  /* ./parser//parser.nit:7777 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:7778 */
-  fra.me.REG[5] = NEW_AType_parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:7783 */
+  /* ./parser//parser.nit:7768 */
+  fra.me.REG[5] = NEW_AType_parser_prod___AType___init_atype(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
+  /* ./parser//parser.nit:7773 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7784 */
+  /* ./parser//parser.nit:7774 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction212____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7784);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7774);
   }
   REGB0 = ATTR_parser___ReduceAction212____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26029,7 +26011,7 @@ void parser___ReduceAction212___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos214]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7787;
+  fra.me.line = 7777;
   fra.me.meth = LOCATE_parser___ReduceAction212___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -26037,7 +26019,7 @@ void parser___ReduceAction212___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7787 */
+  /* ./parser//parser.nit:7777 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction212____goto(fra.me.REG[1]) = REGB0;
@@ -26046,72 +26028,63 @@ void parser___ReduceAction212___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction213___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[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 = 7791;
+  fra.me.line = 7781;
   fra.me.meth = LOCATE_parser___ReduceAction213___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:7793 */
+  /* ./parser//parser.nit:7783 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7794 */
+  /* ./parser//parser.nit:7784 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7795 */
+  /* ./parser//parser.nit:7785 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7796 */
+  /* ./parser//parser.nit:7786 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7797 */
+  /* ./parser//parser.nit:7787 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7798 */
+  /* ./parser//parser.nit:7788 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7799 */
+  /* ./parser//parser.nit:7789 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7800 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7801 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7803 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7803);
-  }
-  /* ./parser//parser.nit:7805 */
+  /* ./parser//parser.nit:7790 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7792 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7805);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7792);
   }
-  /* ./parser//parser.nit:7807 */
+  /* ./parser//parser.nit:7794 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7807);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7794);
   }
-  /* ./parser//parser.nit:7808 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:7809 */
-  fra.me.REG[6] = NEW_AType_parser_prod___AType___init_atype(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:7814 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:7815 */
+  /* ./parser//parser.nit:7795 */
+  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:7796 */
+  fra.me.REG[5] = NEW_AType_parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* ./parser//parser.nit:7801 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7802 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction213____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7815);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7802);
   }
   REGB0 = ATTR_parser___ReduceAction213____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26127,7 +26100,7 @@ void parser___ReduceAction213___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos215]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7818;
+  fra.me.line = 7805;
   fra.me.meth = LOCATE_parser___ReduceAction213___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -26135,7 +26108,7 @@ void parser___ReduceAction213___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7818 */
+  /* ./parser//parser.nit:7805 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction213____goto(fra.me.REG[1]) = REGB0;
@@ -26144,54 +26117,72 @@ void parser___ReduceAction213___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction214___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[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 = 7822;
+  fra.me.line = 7809;
   fra.me.meth = LOCATE_parser___ReduceAction214___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:7824 */
+  /* ./parser//parser.nit:7811 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7825 */
+  /* ./parser//parser.nit:7812 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7826 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7828 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser.nit:7813 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7814 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7815 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7816 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7817 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7818 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7819 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7821 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7821);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* ./parser//parser.nit:7823 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7829 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7823);
   }
-  /* ./parser//parser.nit:7831 */
-  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7825 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7825);
+  }
+  /* ./parser//parser.nit:7826 */
+  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:7827 */
+  fra.me.REG[6] = NEW_AType_parser_prod___AType___init_atype(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
   /* ./parser//parser.nit:7832 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:7833 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction214____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7832);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7833);
   }
   REGB0 = ATTR_parser___ReduceAction214____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26207,7 +26198,7 @@ void parser___ReduceAction214___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos216]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7835;
+  fra.me.line = 7836;
   fra.me.meth = LOCATE_parser___ReduceAction214___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -26215,7 +26206,7 @@ void parser___ReduceAction214___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7835 */
+  /* ./parser//parser.nit:7836 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction214____goto(fra.me.REG[1]) = REGB0;
@@ -26224,66 +26215,54 @@ void parser___ReduceAction214___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction215___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[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 = 7839;
+  fra.me.line = 7840;
   fra.me.meth = LOCATE_parser___ReduceAction215___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:7841 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7842 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7843 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7844 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7847 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7847);
-  }
-  /* ./parser//parser.nit:7848 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7846 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7849 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* ./parser//parser.nit:7847 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7851 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:7852 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7853 */
+  /* ./parser//parser.nit:7849 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7850 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction215____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7853);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7850);
   }
   REGB0 = ATTR_parser___ReduceAction215____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26299,7 +26278,7 @@ void parser___ReduceAction215___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos217]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7856;
+  fra.me.line = 7853;
   fra.me.meth = LOCATE_parser___ReduceAction215___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -26307,7 +26286,7 @@ void parser___ReduceAction215___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7856 */
+  /* ./parser//parser.nit:7853 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction215____goto(fra.me.REG[1]) = REGB0;
@@ -26316,37 +26295,66 @@ void parser___ReduceAction215___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction216___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[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 = 7860;
+  fra.me.line = 7857;
   fra.me.meth = LOCATE_parser___ReduceAction216___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:7862 */
+  /* ./parser//parser.nit:7859 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7863 */
+  /* ./parser//parser.nit:7860 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7864 */
+  /* ./parser//parser.nit:7861 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7862 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:7865 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7867 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7868 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7865);
+  }
+  /* ./parser//parser.nit:7866 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:7867 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
+  /* ./parser//parser.nit:7869 */
+  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:7870 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7871 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction216____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7868);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7871);
   }
   REGB0 = ATTR_parser___ReduceAction216____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26362,7 +26370,7 @@ void parser___ReduceAction216___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos218]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7871;
+  fra.me.line = 7874;
   fra.me.meth = LOCATE_parser___ReduceAction216___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -26370,7 +26378,7 @@ void parser___ReduceAction216___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7871 */
+  /* ./parser//parser.nit:7874 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction216____goto(fra.me.REG[1]) = REGB0;
@@ -26378,14 +26386,14 @@ void parser___ReduceAction216___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos218] = 1;
   return;
 }
-void parser___ReduceAction218___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 = 7875;
-  fra.me.meth = LOCATE_parser___ReduceAction218___action;
+  fra.me.line = 7878;
+  fra.me.meth = LOCATE_parser___ReduceAction217___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26395,85 +26403,84 @@ void parser___ReduceAction218___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7877 */
+  /* ./parser//parser.nit:7880 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7878 */
+  /* ./parser//parser.nit:7881 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7879 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7880 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7882 */
-  fra.me.REG[2] = fra.me.REG[3];
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7883 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction218____goto(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7885 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7886 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction217____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7883);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7886);
   }
-  REGB0 = ATTR_parser___ReduceAction218____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction217____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction218___init(val_t p0, val_t p1, int* init_table){
-  int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction218].i;
+void parser___ReduceAction217___init(val_t p0, val_t p1, int* init_table){
+  int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction217].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos219]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7886;
-  fra.me.meth = LOCATE_parser___ReduceAction218___init;
+  fra.me.line = 7889;
+  fra.me.meth = LOCATE_parser___ReduceAction217___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7886 */
+  /* ./parser//parser.nit:7889 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction218____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction217____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos219] = 1;
   return;
 }
 void parser___ReduceAction219___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  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 = 7890;
+  fra.me.line = 7893;
   fra.me.meth = LOCATE_parser___ReduceAction219___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7892 */
+  /* ./parser//parser.nit:7895 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7893 */
+  /* ./parser//parser.nit:7896 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7894 */
+  /* ./parser//parser.nit:7897 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7895 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7896 */
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:7899 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7898 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7900 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7901 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction219____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7900);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7901);
   }
   REGB0 = ATTR_parser___ReduceAction219____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26489,7 +26496,7 @@ void parser___ReduceAction219___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos220]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7903;
+  fra.me.line = 7904;
   fra.me.meth = LOCATE_parser___ReduceAction219___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -26497,7 +26504,7 @@ void parser___ReduceAction219___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7903 */
+  /* ./parser//parser.nit:7904 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction219____goto(fra.me.REG[1]) = REGB0;
@@ -26511,7 +26518,7 @@ void parser___ReduceAction220___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 = 7907;
+  fra.me.line = 7908;
   fra.me.meth = LOCATE_parser___ReduceAction220___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26521,21 +26528,23 @@ 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:7909 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7910 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:7911 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7912 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7913 */
+  fra.me.REG[3] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7914 */
   fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:7915 */
+  /* ./parser//parser.nit:7917 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7916 */
+  /* ./parser//parser.nit:7918 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction220____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7916);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7918);
   }
   REGB0 = ATTR_parser___ReduceAction220____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26551,7 +26560,7 @@ void parser___ReduceAction220___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos221]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7919;
+  fra.me.line = 7921;
   fra.me.meth = LOCATE_parser___ReduceAction220___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -26559,7 +26568,7 @@ void parser___ReduceAction220___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7919 */
+  /* ./parser//parser.nit:7921 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction220____goto(fra.me.REG[1]) = REGB0;
@@ -26573,7 +26582,7 @@ void parser___ReduceAction221___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 = 7923;
+  fra.me.line = 7925;
   fra.me.meth = LOCATE_parser___ReduceAction221___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26583,17 +26592,21 @@ void parser___ReduceAction221___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:7925 */
+  /* ./parser//parser.nit:7927 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7926 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7928 */
-  fra.me.REG[2] = fra.me.REG[3];
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:7929 */
+  fra.me.REG[3] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7930 */
+  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:7933 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7934 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction221____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7929);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7934);
   }
   REGB0 = ATTR_parser___ReduceAction221____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26609,7 +26622,7 @@ void parser___ReduceAction221___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos222]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7932;
+  fra.me.line = 7937;
   fra.me.meth = LOCATE_parser___ReduceAction221___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -26617,7 +26630,7 @@ void parser___ReduceAction221___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7932 */
+  /* ./parser//parser.nit:7937 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction221____goto(fra.me.REG[1]) = REGB0;
@@ -26626,62 +26639,32 @@ void parser___ReduceAction221___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction222___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[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7936;
+  fra.me.line = 7941;
   fra.me.meth = LOCATE_parser___ReduceAction222___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:7938 */
+  /* ./parser//parser.nit:7943 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7939 */
+  /* ./parser//parser.nit:7944 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7940 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7942 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7942);
-  }
-  /* ./parser//parser.nit:7943 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7944 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
   /* ./parser//parser.nit:7946 */
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  /* ./parser//parser.nit:7949 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7950 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7947 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction222____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7950);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7947);
   }
   REGB0 = ATTR_parser___ReduceAction222____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26697,7 +26680,7 @@ void parser___ReduceAction222___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos223]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7953;
+  fra.me.line = 7950;
   fra.me.meth = LOCATE_parser___ReduceAction222___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -26705,7 +26688,7 @@ void parser___ReduceAction222___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7953 */
+  /* ./parser//parser.nit:7950 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction222____goto(fra.me.REG[1]) = REGB0;
@@ -26714,74 +26697,62 @@ void parser___ReduceAction222___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction223___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[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 = 7957;
+  fra.me.line = 7954;
   fra.me.meth = LOCATE_parser___ReduceAction223___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:7959 */
+  /* ./parser//parser.nit:7956 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7960 */
+  /* ./parser//parser.nit:7957 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7961 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7962 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7964 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7964);
-  }
-  /* ./parser//parser.nit:7966 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:7958 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7960 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7966);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7960);
   }
-  /* ./parser//parser.nit:7967 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser.nit:7961 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7968 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* ./parser//parser.nit:7962 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7970 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:7971 */
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  /* ./parser//parser.nit:7974 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7975 */
+  /* ./parser//parser.nit:7964 */
+  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
+  /* ./parser//parser.nit:7967 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7968 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction223____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7975);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7968);
   }
   REGB0 = ATTR_parser___ReduceAction223____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26797,7 +26768,7 @@ void parser___ReduceAction223___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos224]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7978;
+  fra.me.line = 7971;
   fra.me.meth = LOCATE_parser___ReduceAction223___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -26805,7 +26776,7 @@ void parser___ReduceAction223___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7978 */
+  /* ./parser//parser.nit:7971 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction223____goto(fra.me.REG[1]) = REGB0;
@@ -26814,64 +26785,74 @@ void parser___ReduceAction223___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction224___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[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 = 7982;
+  fra.me.line = 7975;
   fra.me.meth = LOCATE_parser___ReduceAction224___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:7984 */
+  /* ./parser//parser.nit:7977 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7985 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7986 */
+  /* ./parser//parser.nit:7978 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7987 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7989 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:7979 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7980 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7982 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7989);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7982);
   }
-  /* ./parser//parser.nit:7990 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser.nit:7984 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7984);
+  }
+  /* ./parser//parser.nit:7985 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7991 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* ./parser//parser.nit:7986 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
+  /* ./parser//parser.nit:7988 */
+  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:7989 */
+  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
+  /* ./parser//parser.nit:7992 */
+  fra.me.REG[2] = fra.me.REG[5];
   /* ./parser//parser.nit:7993 */
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  /* ./parser//parser.nit:7996 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7997 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction224____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7997);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7993);
   }
   REGB0 = ATTR_parser___ReduceAction224____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26887,7 +26868,7 @@ void parser___ReduceAction224___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos225]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8000;
+  fra.me.line = 7996;
   fra.me.meth = LOCATE_parser___ReduceAction224___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -26895,7 +26876,7 @@ void parser___ReduceAction224___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8000 */
+  /* ./parser//parser.nit:7996 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction224____goto(fra.me.REG[1]) = REGB0;
@@ -26904,76 +26885,64 @@ void parser___ReduceAction224___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction225___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[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 = 8004;
+  fra.me.line = 8000;
   fra.me.meth = LOCATE_parser___ReduceAction225___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:8006 */
+  /* ./parser//parser.nit:8002 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8007 */
+  /* ./parser//parser.nit:8003 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8008 */
+  /* ./parser//parser.nit:8004 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8009 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8010 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8012 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8012);
-  }
-  /* ./parser//parser.nit:8014 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:8005 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8007 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8014);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8007);
   }
-  /* ./parser//parser.nit:8015 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser.nit:8008 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:8016 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* ./parser//parser.nit:8009 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:8018 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:8019 */
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  /* ./parser//parser.nit:8022 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:8023 */
+  /* ./parser//parser.nit:8011 */
+  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
+  /* ./parser//parser.nit:8014 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:8015 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction225____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8023);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8015);
   }
   REGB0 = ATTR_parser___ReduceAction225____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26989,7 +26958,7 @@ void parser___ReduceAction225___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos226]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8026;
+  fra.me.line = 8018;
   fra.me.meth = LOCATE_parser___ReduceAction225___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -26997,7 +26966,7 @@ void parser___ReduceAction225___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8026 */
+  /* ./parser//parser.nit:8018 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction225____goto(fra.me.REG[1]) = REGB0;
@@ -27006,35 +26975,76 @@ void parser___ReduceAction225___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction226___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[5];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8030;
+  fra.me.line = 8022;
   fra.me.meth = LOCATE_parser___ReduceAction226___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:8032 */
+  /* ./parser//parser.nit:8024 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8033 */
+  /* ./parser//parser.nit:8025 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8034 */
+  /* ./parser//parser.nit:8026 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8027 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8028 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8030 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8030);
+  }
+  /* ./parser//parser.nit:8032 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8032);
+  }
+  /* ./parser//parser.nit:8033 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:8034 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
   /* ./parser//parser.nit:8036 */
-  fra.me.REG[2] = fra.me.REG[3];
+  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:8037 */
+  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
+  /* ./parser//parser.nit:8040 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:8041 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction226____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8037);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8041);
   }
   REGB0 = ATTR_parser___ReduceAction226____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27050,7 +27060,7 @@ void parser___ReduceAction226___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos227]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8040;
+  fra.me.line = 8044;
   fra.me.meth = LOCATE_parser___ReduceAction226___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -27058,7 +27068,7 @@ void parser___ReduceAction226___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8040 */
+  /* ./parser//parser.nit:8044 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction226____goto(fra.me.REG[1]) = REGB0;
@@ -27066,50 +27076,45 @@ void parser___ReduceAction226___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos227] = 1;
   return;
 }
-void parser___ReduceAction229___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 8044;
-  fra.me.meth = LOCATE_parser___ReduceAction229___action;
+  fra.me.line = 8048;
+  fra.me.meth = LOCATE_parser___ReduceAction227___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8046 */
+  /* ./parser//parser.nit:8050 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8047 */
+  /* ./parser//parser.nit:8051 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8049 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwreturn, ID_TKwreturn)) /*cast nullable TKwreturn*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8049);
-  }
-  /* ./parser//parser.nit:8050 */
-  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:8052 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:8054 */
   fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:8055 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction229____goto(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction227____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8055);
   }
-  REGB0 = ATTR_parser___ReduceAction229____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction227____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction229___init(val_t p0, val_t p1, int* init_table){
-  int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction229].i;
+void parser___ReduceAction227___init(val_t p0, val_t p1, int* init_table){
+  int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction227].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
@@ -27117,7 +27122,7 @@ void parser___ReduceAction229___init(val_t p0, val_t p1, int* init_table){
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
   fra.me.line = 8058;
-  fra.me.meth = LOCATE_parser___ReduceAction229___init;
+  fra.me.meth = LOCATE_parser___ReduceAction227___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
@@ -27127,13 +27132,13 @@ void parser___ReduceAction229___init(val_t p0, val_t p1, int* init_table){
   /* ./parser//parser.nit:8058 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction229____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction227____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos228] = 1;
   return;
 }
 void parser___ReduceAction230___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -27141,41 +27146,32 @@ void parser___ReduceAction230___action(val_t p0, val_t p1){
   fra.me.line = 8062;
   fra.me.meth = LOCATE_parser___ReduceAction230___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:8064 */
   fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:8065 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8066 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8068 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwreturn, ID_TKwreturn)) /*cast nullable TKwreturn*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8068);
-  }
-  /* ./parser//parser.nit:8070 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:8067 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwreturn, ID_TKwreturn)) /*cast nullable TKwreturn*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8070);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8067);
   }
-  /* ./parser//parser.nit:8071 */
-  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8075 */
+  /* ./parser//parser.nit:8068 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:8072 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8076 */
+  /* ./parser//parser.nit:8073 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction230____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, 8073);
   }
   REGB0 = ATTR_parser___ReduceAction230____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27191,7 +27187,7 @@ void parser___ReduceAction230___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos229]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8079;
+  fra.me.line = 8076;
   fra.me.meth = LOCATE_parser___ReduceAction230___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -27199,7 +27195,7 @@ void parser___ReduceAction230___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8079 */
+  /* ./parser//parser.nit:8076 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction230____goto(fra.me.REG[1]) = REGB0;
@@ -27208,40 +27204,49 @@ void parser___ReduceAction230___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction231___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[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 = 8083;
+  fra.me.line = 8080;
   fra.me.meth = LOCATE_parser___ReduceAction231___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8085 */
+  /* ./parser//parser.nit:8082 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8086 */
+  /* ./parser//parser.nit:8083 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8084 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8086 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwreturn, ID_TKwreturn)) /*cast nullable TKwreturn*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8086);
+  }
   /* ./parser//parser.nit:8088 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Assert failed", NULL, LOCATE_parser, 8088);
   }
   /* ./parser//parser.nit:8089 */
-  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8094 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:8093 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8095 */
+  /* ./parser//parser.nit:8094 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction231____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8095);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8094);
   }
   REGB0 = ATTR_parser___ReduceAction231____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27257,7 +27262,7 @@ void parser___ReduceAction231___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos230]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8098;
+  fra.me.line = 8097;
   fra.me.meth = LOCATE_parser___ReduceAction231___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -27265,7 +27270,7 @@ void parser___ReduceAction231___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8098 */
+  /* ./parser//parser.nit:8097 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction231____goto(fra.me.REG[1]) = REGB0;
@@ -27274,49 +27279,40 @@ void parser___ReduceAction231___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction232___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[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 = 8102;
+  fra.me.line = 8101;
   fra.me.meth = LOCATE_parser___ReduceAction232___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:8104 */
+  /* ./parser//parser.nit:8103 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8105 */
+  /* ./parser//parser.nit:8104 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:8106 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8108 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8108);
-  }
-  /* ./parser//parser.nit:8110 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8110);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8106);
   }
-  /* ./parser//parser.nit:8111 */
-  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8116 */
+  /* ./parser//parser.nit:8107 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:8112 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8117 */
+  /* ./parser//parser.nit:8113 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction232____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8117);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8113);
   }
   REGB0 = ATTR_parser___ReduceAction232____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27332,7 +27328,7 @@ void parser___ReduceAction232___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos231]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8120;
+  fra.me.line = 8116;
   fra.me.meth = LOCATE_parser___ReduceAction232___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -27340,7 +27336,7 @@ void parser___ReduceAction232___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8120 */
+  /* ./parser//parser.nit:8116 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction232____goto(fra.me.REG[1]) = REGB0;
@@ -27354,7 +27350,7 @@ void parser___ReduceAction233___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 = 8124;
+  fra.me.line = 8120;
   fra.me.meth = LOCATE_parser___ReduceAction233___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -27365,33 +27361,33 @@ void parser___ReduceAction233___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8126 */
+  /* ./parser//parser.nit:8122 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8127 */
+  /* ./parser//parser.nit:8123 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8128 */
+  /* ./parser//parser.nit:8124 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8130 */
+  /* ./parser//parser.nit:8126 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8130);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8126);
   }
-  /* ./parser//parser.nit:8132 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:8128 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8132);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8128);
   }
-  /* ./parser//parser.nit:8133 */
-  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:8138 */
+  /* ./parser//parser.nit:8129 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:8134 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8139 */
+  /* ./parser//parser.nit:8135 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction233____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8139);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8135);
   }
   REGB0 = ATTR_parser___ReduceAction233____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27407,7 +27403,7 @@ void parser___ReduceAction233___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos232]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8142;
+  fra.me.line = 8138;
   fra.me.meth = LOCATE_parser___ReduceAction233___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -27415,7 +27411,7 @@ void parser___ReduceAction233___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8142 */
+  /* ./parser//parser.nit:8138 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction233____goto(fra.me.REG[1]) = REGB0;
@@ -27424,58 +27420,49 @@ void parser___ReduceAction233___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction234___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[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 = 8146;
+  fra.me.line = 8142;
   fra.me.meth = LOCATE_parser___ReduceAction234___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:8148 */
+  /* ./parser//parser.nit:8144 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8149 */
+  /* ./parser//parser.nit:8145 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8150 */
+  /* ./parser//parser.nit:8146 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8151 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8153 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8153);
-  }
-  /* ./parser//parser.nit:8155 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* ./parser//parser.nit:8148 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8155);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8148);
   }
-  /* ./parser//parser.nit:8157 */
+  /* ./parser//parser.nit:8150 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8157);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8150);
   }
-  /* ./parser//parser.nit:8158 */
-  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8163 */
+  /* ./parser//parser.nit:8151 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:8156 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8164 */
+  /* ./parser//parser.nit:8157 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction234____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8164);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8157);
   }
   REGB0 = ATTR_parser___ReduceAction234____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27491,7 +27478,7 @@ void parser___ReduceAction234___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos233]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8167;
+  fra.me.line = 8160;
   fra.me.meth = LOCATE_parser___ReduceAction234___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -27499,7 +27486,7 @@ void parser___ReduceAction234___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8167 */
+  /* ./parser//parser.nit:8160 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction234____goto(fra.me.REG[1]) = REGB0;
@@ -27508,40 +27495,58 @@ void parser___ReduceAction234___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction235___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[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 = 8171;
+  fra.me.line = 8164;
   fra.me.meth = LOCATE_parser___ReduceAction235___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:8173 */
+  /* ./parser//parser.nit:8166 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8174 */
+  /* ./parser//parser.nit:8167 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8176 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwabort, ID_TKwabort)) /*cast nullable TKwabort*/;
+  /* ./parser//parser.nit:8168 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8169 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8171 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8176);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8171);
   }
-  /* ./parser//parser.nit:8177 */
-  fra.me.REG[3] = NEW_AAbortExpr_parser_prod___AAbortExpr___init_aabortexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:8180 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8173 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8173);
+  }
+  /* ./parser//parser.nit:8175 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8175);
+  }
+  /* ./parser//parser.nit:8176 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:8181 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8182 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction235____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8181);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8182);
   }
   REGB0 = ATTR_parser___ReduceAction235____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27557,7 +27562,7 @@ void parser___ReduceAction235___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos234]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8184;
+  fra.me.line = 8185;
   fra.me.meth = LOCATE_parser___ReduceAction235___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -27565,7 +27570,7 @@ void parser___ReduceAction235___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8184 */
+  /* ./parser//parser.nit:8185 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction235____goto(fra.me.REG[1]) = REGB0;
@@ -27579,7 +27584,7 @@ void parser___ReduceAction236___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 = 8188;
+  fra.me.line = 8189;
   fra.me.meth = LOCATE_parser___ReduceAction236___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27589,25 +27594,25 @@ void parser___ReduceAction236___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:8190 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:8191 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8192 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8193 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
+  /* ./parser//parser.nit:8194 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwabort, ID_TKwabort)) /*cast nullable TKwabort*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8193);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8194);
   }
-  /* ./parser//parser.nit:8194 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8199 */
+  /* ./parser//parser.nit:8195 */
+  fra.me.REG[3] = NEW_AAbortExpr_parser_prod___AAbortExpr___init_aabortexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:8198 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8200 */
+  /* ./parser//parser.nit:8199 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction236____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, 8199);
   }
   REGB0 = ATTR_parser___ReduceAction236____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27623,7 +27628,7 @@ void parser___ReduceAction236___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos235]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8203;
+  fra.me.line = 8202;
   fra.me.meth = LOCATE_parser___ReduceAction236___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -27631,7 +27636,7 @@ void parser___ReduceAction236___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8203 */
+  /* ./parser//parser.nit:8202 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction236____goto(fra.me.REG[1]) = REGB0;
@@ -27640,49 +27645,40 @@ void parser___ReduceAction236___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction237___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[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 = 8207;
+  fra.me.line = 8206;
   fra.me.meth = LOCATE_parser___ReduceAction237___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:8209 */
+  /* ./parser//parser.nit:8208 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8210 */
+  /* ./parser//parser.nit:8209 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:8211 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8213 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8213);
-  }
-  /* ./parser//parser.nit:8215 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8211);
   }
-  /* ./parser//parser.nit:8216 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8221 */
+  /* ./parser//parser.nit:8212 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:8217 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8222 */
+  /* ./parser//parser.nit:8218 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction237____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8222);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8218);
   }
   REGB0 = ATTR_parser___ReduceAction237____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27698,7 +27694,7 @@ void parser___ReduceAction237___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos236]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8225;
+  fra.me.line = 8221;
   fra.me.meth = LOCATE_parser___ReduceAction237___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -27706,7 +27702,7 @@ void parser___ReduceAction237___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8225 */
+  /* ./parser//parser.nit:8221 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction237____goto(fra.me.REG[1]) = REGB0;
@@ -27720,7 +27716,7 @@ void parser___ReduceAction238___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 = 8229;
+  fra.me.line = 8225;
   fra.me.meth = LOCATE_parser___ReduceAction238___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -27731,33 +27727,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:8231 */
+  /* ./parser//parser.nit:8227 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8232 */
+  /* ./parser//parser.nit:8228 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8233 */
+  /* ./parser//parser.nit:8229 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8235 */
+  /* ./parser//parser.nit:8231 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8235);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8231);
   }
-  /* ./parser//parser.nit:8237 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:8233 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8237);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8233);
   }
-  /* ./parser//parser.nit:8238 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:8243 */
+  /* ./parser//parser.nit:8234 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:8239 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8244 */
+  /* ./parser//parser.nit:8240 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction238____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8244);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8240);
   }
   REGB0 = ATTR_parser___ReduceAction238____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27773,7 +27769,7 @@ void parser___ReduceAction238___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos237]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8247;
+  fra.me.line = 8243;
   fra.me.meth = LOCATE_parser___ReduceAction238___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -27781,7 +27777,7 @@ void parser___ReduceAction238___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8247 */
+  /* ./parser//parser.nit:8243 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction238____goto(fra.me.REG[1]) = REGB0;
@@ -27790,58 +27786,49 @@ void parser___ReduceAction238___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction239___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[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 = 8251;
+  fra.me.line = 8247;
   fra.me.meth = LOCATE_parser___ReduceAction239___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:8253 */
+  /* ./parser//parser.nit:8249 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8254 */
+  /* ./parser//parser.nit:8250 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8255 */
+  /* ./parser//parser.nit:8251 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8256 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8258 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8258);
-  }
-  /* ./parser//parser.nit:8260 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* ./parser//parser.nit:8253 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8260);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8253);
   }
-  /* ./parser//parser.nit:8262 */
+  /* ./parser//parser.nit:8255 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8262);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8255);
   }
-  /* ./parser//parser.nit:8263 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8268 */
+  /* ./parser//parser.nit:8256 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:8261 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8269 */
+  /* ./parser//parser.nit:8262 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction239____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8269);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8262);
   }
   REGB0 = ATTR_parser___ReduceAction239____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27857,7 +27844,7 @@ void parser___ReduceAction239___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos238]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8272;
+  fra.me.line = 8265;
   fra.me.meth = LOCATE_parser___ReduceAction239___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -27865,7 +27852,7 @@ void parser___ReduceAction239___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8272 */
+  /* ./parser//parser.nit:8265 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction239____goto(fra.me.REG[1]) = REGB0;
@@ -27873,99 +27860,86 @@ void parser___ReduceAction239___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos238] = 1;
   return;
 }
-void parser___ReduceAction246___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___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 tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8276;
-  fra.me.meth = LOCATE_parser___ReduceAction246___action;
+  fra.me.line = 8269;
+  fra.me.meth = LOCATE_parser___ReduceAction240___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:8278 */
+  /* ./parser//parser.nit:8271 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8279 */
+  /* ./parser//parser.nit:8272 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8280 */
+  /* ./parser//parser.nit:8273 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8281 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8282 */
+  /* ./parser//parser.nit:8274 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8283 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8284 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8285 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8287 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:8276 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8287);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8276);
   }
-  /* ./parser//parser.nit:8289 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:8278 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8289);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8278);
   }
-  /* ./parser//parser.nit:8291 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:8280 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8291);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8280);
   }
-  /* ./parser//parser.nit:8292 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:8293 */
-  fra.me.REG[7] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:8299 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:8300 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction246____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:8281 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:8286 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8287 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction240____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8300);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8287);
   }
-  REGB0 = ATTR_parser___ReduceAction246____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction240____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction246___init(val_t p0, val_t p1, int* init_table){
-  int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction246].i;
+void parser___ReduceAction240___init(val_t p0, val_t p1, int* init_table){
+  int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction240].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos239]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8303;
-  fra.me.meth = LOCATE_parser___ReduceAction246___init;
+  fra.me.line = 8290;
+  fra.me.meth = LOCATE_parser___ReduceAction240___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8303 */
+  /* ./parser//parser.nit:8290 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction246____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction240____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos239] = 1;
   return;
@@ -27976,7 +27950,7 @@ void parser___ReduceAction247___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 = 8307;
+  fra.me.line = 8294;
   fra.me.meth = LOCATE_parser___ReduceAction247___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -27990,42 +27964,52 @@ void parser___ReduceAction247___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:8309 */
+  /* ./parser//parser.nit:8296 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8310 */
+  /* ./parser//parser.nit:8297 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8311 */
+  /* ./parser//parser.nit:8298 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8312 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8313 */
+  /* ./parser//parser.nit:8299 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8300 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8301 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8302 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8314 */
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8317 */
+  /* ./parser//parser.nit:8303 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8305 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8305);
+  }
+  /* ./parser//parser.nit:8307 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8317);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8307);
   }
-  /* ./parser//parser.nit:8319 */
+  /* ./parser//parser.nit:8309 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8319);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8309);
   }
-  /* ./parser//parser.nit:8320 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:8321 */
-  fra.me.REG[6] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[7], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:8327 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:8328 */
+  /* ./parser//parser.nit:8310 */
+  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:8311 */
+  fra.me.REG[7] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[7]);
+  /* ./parser//parser.nit:8317 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:8318 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction247____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8328);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8318);
   }
   REGB0 = ATTR_parser___ReduceAction247____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28041,7 +28025,7 @@ void parser___ReduceAction247___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos240]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8331;
+  fra.me.line = 8321;
   fra.me.meth = LOCATE_parser___ReduceAction247___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -28049,7 +28033,7 @@ void parser___ReduceAction247___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8331 */
+  /* ./parser//parser.nit:8321 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction247____goto(fra.me.REG[1]) = REGB0;
@@ -28058,15 +28042,15 @@ void parser___ReduceAction247___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction248___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 = 8335;
+  fra.me.line = 8325;
   fra.me.meth = LOCATE_parser___ReduceAction248___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;
@@ -28075,66 +28059,44 @@ void parser___ReduceAction248___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8337 */
+  /* ./parser//parser.nit:8327 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8338 */
+  /* ./parser//parser.nit:8328 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8339 */
+  /* ./parser//parser.nit:8329 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8340 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8341 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8342 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8343 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8344 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8345 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8347 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8347);
-  }
-  /* ./parser//parser.nit:8349 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8349);
-  }
-  /* ./parser//parser.nit:8351 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:8330 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8331 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8332 */
+  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:8335 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8351);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8335);
   }
-  /* ./parser//parser.nit:8352 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
-  fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:8354 */
+  /* ./parser//parser.nit:8337 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8354);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8337);
   }
-  /* ./parser//parser.nit:8355 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[3]);
-  fra.me.REG[8] = fra.me.REG[3];
-  /* ./parser//parser.nit:8356 */
-  fra.me.REG[8] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:8362 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:8363 */
+  /* ./parser//parser.nit:8338 */
+  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:8339 */
+  fra.me.REG[6] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[7], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
+  /* ./parser//parser.nit:8345 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:8346 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction248____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8363);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8346);
   }
   REGB0 = ATTR_parser___ReduceAction248____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28150,7 +28112,7 @@ void parser___ReduceAction248___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos241]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8366;
+  fra.me.line = 8349;
   fra.me.meth = LOCATE_parser___ReduceAction248___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -28158,7 +28120,7 @@ void parser___ReduceAction248___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8366 */
+  /* ./parser//parser.nit:8349 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction248____goto(fra.me.REG[1]) = REGB0;
@@ -28172,7 +28134,7 @@ void parser___ReduceAction249___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 = 8370;
+  fra.me.line = 8353;
   fra.me.meth = LOCATE_parser___ReduceAction249___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -28187,53 +28149,63 @@ void parser___ReduceAction249___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:8372 */
+  /* ./parser//parser.nit:8355 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8373 */
+  /* ./parser//parser.nit:8356 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8374 */
+  /* ./parser//parser.nit:8357 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8375 */
+  /* ./parser//parser.nit:8358 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8376 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8377 */
+  /* ./parser//parser.nit:8359 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8360 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8361 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8362 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8378 */
-  fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8381 */
+  /* ./parser//parser.nit:8363 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8365 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8365);
+  }
+  /* ./parser//parser.nit:8367 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8381);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8367);
   }
-  /* ./parser//parser.nit:8383 */
+  /* ./parser//parser.nit:8369 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8383);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8369);
   }
-  /* ./parser//parser.nit:8384 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
-  fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:8386 */
+  /* ./parser//parser.nit:8370 */
+  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:8372 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8386);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8372);
   }
-  /* ./parser//parser.nit:8387 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
-  fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:8388 */
-  fra.me.REG[7] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[8], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:8394 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:8395 */
+  /* ./parser//parser.nit:8373 */
+  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:8374 */
+  fra.me.REG[8] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[8]);
+  /* ./parser//parser.nit:8380 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* ./parser//parser.nit:8381 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction249____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8395);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8381);
   }
   REGB0 = ATTR_parser___ReduceAction249____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28249,7 +28221,7 @@ void parser___ReduceAction249___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos242]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8398;
+  fra.me.line = 8384;
   fra.me.meth = LOCATE_parser___ReduceAction249___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -28257,7 +28229,7 @@ void parser___ReduceAction249___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8398 */
+  /* ./parser//parser.nit:8384 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction249____goto(fra.me.REG[1]) = REGB0;
@@ -28266,55 +28238,73 @@ void parser___ReduceAction249___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction250___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[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8402;
+  fra.me.line = 8388;
   fra.me.meth = LOCATE_parser___ReduceAction250___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8404 */
+  /* ./parser//parser.nit:8390 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8405 */
+  /* ./parser//parser.nit:8391 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8406 */
+  /* ./parser//parser.nit:8392 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8407 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8409 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
+  /* ./parser//parser.nit:8393 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8394 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8395 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8396 */
+  fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:8399 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8409);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8399);
   }
-  /* ./parser//parser.nit:8411 */
+  /* ./parser//parser.nit:8401 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8401);
+  }
+  /* ./parser//parser.nit:8402 */
+  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:8404 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8411);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8404);
   }
+  /* ./parser//parser.nit:8405 */
+  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:8406 */
+  fra.me.REG[7] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[8], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
   /* ./parser//parser.nit:8412 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
+  fra.me.REG[2] = fra.me.REG[7];
   /* ./parser//parser.nit:8413 */
-  fra.me.REG[5] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:8418 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:8419 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction250____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8419);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8413);
   }
   REGB0 = ATTR_parser___ReduceAction250____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28330,7 +28320,7 @@ void parser___ReduceAction250___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos243]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8422;
+  fra.me.line = 8416;
   fra.me.meth = LOCATE_parser___ReduceAction250___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -28338,7 +28328,7 @@ void parser___ReduceAction250___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8422 */
+  /* ./parser//parser.nit:8416 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction250____goto(fra.me.REG[1]) = REGB0;
@@ -28347,64 +28337,55 @@ void parser___ReduceAction250___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction251___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[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8426;
+  fra.me.line = 8420;
   fra.me.meth = LOCATE_parser___ReduceAction251___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:8428 */
+  /* ./parser//parser.nit:8422 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8429 */
+  /* ./parser//parser.nit:8423 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8430 */
+  /* ./parser//parser.nit:8424 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8431 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8432 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8434 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AQualified, ID_AQualified)) /*cast nullable AQualified*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8434);
-  }
-  /* ./parser//parser.nit:8436 */
+  /* ./parser//parser.nit:8425 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8427 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8436);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8427);
   }
-  /* ./parser//parser.nit:8438 */
+  /* ./parser//parser.nit:8429 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8438);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8429);
   }
-  /* ./parser//parser.nit:8439 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:8440 */
-  fra.me.REG[6] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:8445 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:8446 */
+  /* ./parser//parser.nit:8430 */
+  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:8431 */
+  fra.me.REG[5] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* ./parser//parser.nit:8436 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:8437 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction251____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8446);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8437);
   }
   REGB0 = ATTR_parser___ReduceAction251____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28420,7 +28401,7 @@ void parser___ReduceAction251___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos244]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8449;
+  fra.me.line = 8440;
   fra.me.meth = LOCATE_parser___ReduceAction251___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -28428,7 +28409,7 @@ void parser___ReduceAction251___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8449 */
+  /* ./parser//parser.nit:8440 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction251____goto(fra.me.REG[1]) = REGB0;
@@ -28442,7 +28423,7 @@ void parser___ReduceAction252___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 = 8453;
+  fra.me.line = 8444;
   fra.me.meth = LOCATE_parser___ReduceAction252___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -28455,50 +28436,46 @@ void parser___ReduceAction252___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:8455 */
+  /* ./parser//parser.nit:8446 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8456 */
+  /* ./parser//parser.nit:8447 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8457 */
+  /* ./parser//parser.nit:8448 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8458 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8459 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8460 */
+  /* ./parser//parser.nit:8449 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8461 */
+  /* ./parser//parser.nit:8450 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8463 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:8452 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AQualified, ID_AQualified)) /*cast nullable AQualified*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8463);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8452);
   }
-  /* ./parser//parser.nit:8465 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* ./parser//parser.nit:8454 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8465);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8454);
   }
-  /* ./parser//parser.nit:8467 */
+  /* ./parser//parser.nit:8456 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8467);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8456);
   }
-  /* ./parser//parser.nit:8468 */
+  /* ./parser//parser.nit:8457 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
   fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:8469 */
-  fra.me.REG[6] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:8474 */
+  /* ./parser//parser.nit:8458 */
+  fra.me.REG[6] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
+  /* ./parser//parser.nit:8463 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:8475 */
+  /* ./parser//parser.nit:8464 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction252____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8475);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8464);
   }
   REGB0 = ATTR_parser___ReduceAction252____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28514,7 +28491,7 @@ void parser___ReduceAction252___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos245]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8478;
+  fra.me.line = 8467;
   fra.me.meth = LOCATE_parser___ReduceAction252___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -28522,7 +28499,7 @@ void parser___ReduceAction252___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8478 */
+  /* ./parser//parser.nit:8467 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction252____goto(fra.me.REG[1]) = REGB0;
@@ -28536,7 +28513,7 @@ void parser___ReduceAction253___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 = 8482;
+  fra.me.line = 8471;
   fra.me.meth = LOCATE_parser___ReduceAction253___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -28549,40 +28526,50 @@ void parser___ReduceAction253___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8484 */
+  /* ./parser//parser.nit:8473 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8485 */
+  /* ./parser//parser.nit:8474 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8486 */
+  /* ./parser//parser.nit:8475 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8487 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8488 */
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8491 */
+  /* ./parser//parser.nit:8476 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8477 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8478 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8479 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8481 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8481);
+  }
+  /* ./parser//parser.nit:8483 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8491);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8483);
   }
-  /* ./parser//parser.nit:8493 */
+  /* ./parser//parser.nit:8485 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8493);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8485);
   }
-  /* ./parser//parser.nit:8494 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:8495 */
-  fra.me.REG[5] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[6], fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:8500 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:8501 */
+  /* ./parser//parser.nit:8486 */
+  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:8487 */
+  fra.me.REG[6] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
+  /* ./parser//parser.nit:8492 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:8493 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction253____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8501);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8493);
   }
   REGB0 = ATTR_parser___ReduceAction253____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28598,7 +28585,7 @@ void parser___ReduceAction253___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos246]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8504;
+  fra.me.line = 8496;
   fra.me.meth = LOCATE_parser___ReduceAction253___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -28606,7 +28593,7 @@ void parser___ReduceAction253___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8504 */
+  /* ./parser//parser.nit:8496 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction253____goto(fra.me.REG[1]) = REGB0;
@@ -28615,49 +28602,58 @@ void parser___ReduceAction253___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction254___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[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 = 8508;
+  fra.me.line = 8500;
   fra.me.meth = LOCATE_parser___ReduceAction254___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:8510 */
+  /* ./parser//parser.nit:8502 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8511 */
+  /* ./parser//parser.nit:8503 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8512 */
+  /* ./parser//parser.nit:8504 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8514 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwlabel, ID_TKwlabel)) /*cast nullable TKwlabel*/;
+  /* ./parser//parser.nit:8505 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8506 */
+  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:8509 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8514);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8509);
   }
-  /* ./parser//parser.nit:8516 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:8511 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8516);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8511);
   }
-  /* ./parser//parser.nit:8517 */
-  fra.me.REG[3] = NEW_ALabel_parser_prod___ALabel___init_alabel(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8521 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8522 */
+  /* ./parser//parser.nit:8512 */
+  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:8513 */
+  fra.me.REG[5] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[6], fra.me.REG[4], fra.me.REG[5]);
+  /* ./parser//parser.nit:8518 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:8519 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction254____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8522);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8519);
   }
   REGB0 = ATTR_parser___ReduceAction254____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28673,7 +28669,7 @@ void parser___ReduceAction254___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos247]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8525;
+  fra.me.line = 8522;
   fra.me.meth = LOCATE_parser___ReduceAction254___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -28681,7 +28677,7 @@ void parser___ReduceAction254___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8525 */
+  /* ./parser//parser.nit:8522 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction254____goto(fra.me.REG[1]) = REGB0;
@@ -28692,11 +28688,10 @@ void parser___ReduceAction254___init(val_t p0, val_t p1, int* init_table){
 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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8529;
+  fra.me.line = 8526;
   fra.me.meth = LOCATE_parser___ReduceAction255___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -28707,37 +28702,33 @@ void parser___ReduceAction255___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8531 */
+  /* ./parser//parser.nit:8528 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8532 */
+  /* ./parser//parser.nit:8529 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8533 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8535 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser.nit:8530 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8532 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwlabel, ID_TKwlabel)) /*cast nullable TKwlabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8532);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* ./parser//parser.nit:8534 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:8536 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8534);
   }
-  /* ./parser//parser.nit:8538 */
-  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:8535 */
+  fra.me.REG[3] = NEW_ALabel_parser_prod___ALabel___init_alabel(fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:8539 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8540 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction255____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8539);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8540);
   }
   REGB0 = ATTR_parser___ReduceAction255____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28753,7 +28744,7 @@ void parser___ReduceAction255___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos248]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8542;
+  fra.me.line = 8543;
   fra.me.meth = LOCATE_parser___ReduceAction255___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -28761,7 +28752,7 @@ void parser___ReduceAction255___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8542 */
+  /* ./parser//parser.nit:8543 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction255____goto(fra.me.REG[1]) = REGB0;
@@ -28770,66 +28761,54 @@ void parser___ReduceAction255___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction256___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[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 = 8546;
+  fra.me.line = 8547;
   fra.me.meth = LOCATE_parser___ReduceAction256___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:8548 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:8549 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:8550 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:8551 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8554 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8554);
-  }
-  /* ./parser//parser.nit:8555 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8553 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:8556 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* ./parser//parser.nit:8554 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:8558 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:8559 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:8560 */
+  /* ./parser//parser.nit:8556 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:8557 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction256____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8560);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8557);
   }
   REGB0 = ATTR_parser___ReduceAction256____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28845,7 +28824,7 @@ void parser___ReduceAction256___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos249]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8563;
+  fra.me.line = 8560;
   fra.me.meth = LOCATE_parser___ReduceAction256___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -28853,7 +28832,7 @@ void parser___ReduceAction256___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8563 */
+  /* ./parser//parser.nit:8560 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction256____goto(fra.me.REG[1]) = REGB0;
@@ -28862,79 +28841,66 @@ void parser___ReduceAction256___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction257___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[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 = 8567;
+  fra.me.line = 8564;
   fra.me.meth = LOCATE_parser___ReduceAction257___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8569 */
+  /* ./parser//parser.nit:8566 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8570 */
+  /* ./parser//parser.nit:8567 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8571 */
+  /* ./parser//parser.nit:8568 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8569 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:8572 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8573 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8574 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8575 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8577 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8577);
-  }
-  /* ./parser//parser.nit:8579 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8579);
-  }
-  /* ./parser//parser.nit:8581 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8581);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8572);
   }
-  /* ./parser//parser.nit:8583 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:8573 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8583);
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* ./parser//parser.nit:8585 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8585);
+    /* ./parser//parser.nit:8574 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:8586 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8594 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8595 */
+  /* ./parser//parser.nit:8576 */
+  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:8577 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:8578 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction257____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8595);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8578);
   }
   REGB0 = ATTR_parser___ReduceAction257____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28950,7 +28916,7 @@ void parser___ReduceAction257___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos250]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8598;
+  fra.me.line = 8581;
   fra.me.meth = LOCATE_parser___ReduceAction257___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -28958,7 +28924,7 @@ void parser___ReduceAction257___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8598 */
+  /* ./parser//parser.nit:8581 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction257____goto(fra.me.REG[1]) = REGB0;
@@ -28967,15 +28933,15 @@ void parser___ReduceAction257___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction258___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 = 8602;
+  fra.me.line = 8585;
   fra.me.meth = LOCATE_parser___ReduceAction258___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;
@@ -28985,73 +28951,61 @@ void parser___ReduceAction258___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:8604 */
+  /* ./parser//parser.nit:8587 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8605 */
+  /* ./parser//parser.nit:8588 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8606 */
+  /* ./parser//parser.nit:8589 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8607 */
+  /* ./parser//parser.nit:8590 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8608 */
+  /* ./parser//parser.nit:8591 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8609 */
+  /* ./parser//parser.nit:8592 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8610 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8611 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8613 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8613);
-  }
-  /* ./parser//parser.nit:8615 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* ./parser//parser.nit:8593 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8595 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8615);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8595);
   }
-  /* ./parser//parser.nit:8617 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:8597 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8617);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8597);
   }
-  /* ./parser//parser.nit:8618 */
-  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[6]);
-  fra.me.REG[9] = fra.me.REG[6];
-  /* ./parser//parser.nit:8620 */
+  /* ./parser//parser.nit:8599 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8620);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8599);
   }
-  /* ./parser//parser.nit:8622 */
+  /* ./parser//parser.nit:8601 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8622);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8601);
   }
-  /* ./parser//parser.nit:8624 */
+  /* ./parser//parser.nit:8603 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8624);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8603);
   }
-  /* ./parser//parser.nit:8625 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[9], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8633 */
+  /* ./parser//parser.nit:8604 */
+  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:8612 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8634 */
+  /* ./parser//parser.nit:8613 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction258____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8634);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8613);
   }
   REGB0 = ATTR_parser___ReduceAction258____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29067,7 +29021,7 @@ void parser___ReduceAction258___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos251]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8637;
+  fra.me.line = 8616;
   fra.me.meth = LOCATE_parser___ReduceAction258___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -29075,7 +29029,7 @@ void parser___ReduceAction258___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8637 */
+  /* ./parser//parser.nit:8616 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction258____goto(fra.me.REG[1]) = REGB0;
@@ -29084,15 +29038,15 @@ void parser___ReduceAction258___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction259___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 = 8641;
+  fra.me.line = 8620;
   fra.me.meth = LOCATE_parser___ReduceAction259___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;
@@ -29101,53 +29055,74 @@ void parser___ReduceAction259___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:8643 */
+  /* ./parser//parser.nit:8622 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8644 */
+  /* ./parser//parser.nit:8623 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8645 */
+  /* ./parser//parser.nit:8624 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8646 */
+  /* ./parser//parser.nit:8625 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8647 */
+  /* ./parser//parser.nit:8626 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8648 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8650 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* ./parser//parser.nit:8627 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8628 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8629 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8631 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8650);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8631);
   }
-  /* ./parser//parser.nit:8652 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* ./parser//parser.nit:8633 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8652);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8633);
   }
-  /* ./parser//parser.nit:8654 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* ./parser//parser.nit:8635 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8654);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8635);
   }
-  /* ./parser//parser.nit:8656 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:8636 */
+  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:8638 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8656);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8638);
   }
-  /* ./parser//parser.nit:8657 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8665 */
+  /* ./parser//parser.nit:8640 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8640);
+  }
+  /* ./parser//parser.nit:8642 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8642);
+  }
+  /* ./parser//parser.nit:8643 */
+  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[9], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:8651 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8666 */
+  /* ./parser//parser.nit:8652 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction259____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8666);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8652);
   }
   REGB0 = ATTR_parser___ReduceAction259____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29163,7 +29138,7 @@ void parser___ReduceAction259___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos252]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8669;
+  fra.me.line = 8655;
   fra.me.meth = LOCATE_parser___ReduceAction259___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -29171,7 +29146,7 @@ void parser___ReduceAction259___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8669 */
+  /* ./parser//parser.nit:8655 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction259____goto(fra.me.REG[1]) = REGB0;
@@ -29180,15 +29155,15 @@ void parser___ReduceAction259___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction260___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 = 8673;
+  fra.me.line = 8659;
   fra.me.meth = LOCATE_parser___ReduceAction260___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;
@@ -29197,65 +29172,53 @@ void parser___ReduceAction260___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:8675 */
+  /* ./parser//parser.nit:8661 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8676 */
+  /* ./parser//parser.nit:8662 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8677 */
+  /* ./parser//parser.nit:8663 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8678 */
+  /* ./parser//parser.nit:8664 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8679 */
+  /* ./parser//parser.nit:8665 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8680 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8681 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8683 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8683);
-  }
-  /* ./parser//parser.nit:8685 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* ./parser//parser.nit:8666 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8668 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8685);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8668);
   }
-  /* ./parser//parser.nit:8687 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:8670 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8687);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8670);
   }
-  /* ./parser//parser.nit:8688 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
-  fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:8690 */
+  /* ./parser//parser.nit:8672 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8690);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8672);
   }
-  /* ./parser//parser.nit:8692 */
+  /* ./parser//parser.nit:8674 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8692);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8674);
   }
-  /* ./parser//parser.nit:8693 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8701 */
+  /* ./parser//parser.nit:8675 */
+  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:8683 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8702 */
+  /* ./parser//parser.nit:8684 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction260____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8702);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8684);
   }
   REGB0 = ATTR_parser___ReduceAction260____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29271,7 +29234,7 @@ void parser___ReduceAction260___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos253]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8705;
+  fra.me.line = 8687;
   fra.me.meth = LOCATE_parser___ReduceAction260___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -29279,7 +29242,7 @@ void parser___ReduceAction260___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8705 */
+  /* ./parser//parser.nit:8687 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction260____goto(fra.me.REG[1]) = REGB0;
@@ -29288,15 +29251,15 @@ void parser___ReduceAction260___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction261___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[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8709;
+  fra.me.line = 8691;
   fra.me.meth = LOCATE_parser___ReduceAction261___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;
@@ -29304,49 +29267,66 @@ void parser___ReduceAction261___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:8711 */
+  /* ./parser//parser.nit:8693 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8712 */
+  /* ./parser//parser.nit:8694 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8713 */
+  /* ./parser//parser.nit:8695 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8714 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8715 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8716 */
+  /* ./parser//parser.nit:8696 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8717 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8719 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* ./parser//parser.nit:8697 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8698 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8699 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8701 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8719);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8701);
   }
-  /* ./parser//parser.nit:8721 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* ./parser//parser.nit:8703 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8721);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8703);
   }
-  /* ./parser//parser.nit:8723 */
+  /* ./parser//parser.nit:8705 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8705);
+  }
+  /* ./parser//parser.nit:8706 */
+  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:8708 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8708);
+  }
+  /* ./parser//parser.nit:8710 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8723);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8710);
   }
-  /* ./parser//parser.nit:8724 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8732 */
+  /* ./parser//parser.nit:8711 */
+  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:8719 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8733 */
+  /* ./parser//parser.nit:8720 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction261____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8733);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8720);
   }
   REGB0 = ATTR_parser___ReduceAction261____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29362,7 +29342,7 @@ void parser___ReduceAction261___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos254]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8736;
+  fra.me.line = 8723;
   fra.me.meth = LOCATE_parser___ReduceAction261___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -29370,7 +29350,7 @@ void parser___ReduceAction261___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8736 */
+  /* ./parser//parser.nit:8723 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction261____goto(fra.me.REG[1]) = REGB0;
@@ -29379,15 +29359,15 @@ void parser___ReduceAction261___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction262___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[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 = 8740;
+  fra.me.line = 8727;
   fra.me.meth = LOCATE_parser___ReduceAction262___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;
@@ -29395,61 +29375,49 @@ void parser___ReduceAction262___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:8742 */
+  /* ./parser//parser.nit:8729 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8743 */
+  /* ./parser//parser.nit:8730 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8744 */
+  /* ./parser//parser.nit:8731 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8745 */
+  /* ./parser//parser.nit:8732 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8746 */
+  /* ./parser//parser.nit:8733 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8747 */
+  /* ./parser//parser.nit:8734 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8748 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8749 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8751 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8751);
-  }
-  /* ./parser//parser.nit:8753 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* ./parser//parser.nit:8735 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8737 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8753);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8737);
   }
-  /* ./parser//parser.nit:8755 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:8739 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8755);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8739);
   }
-  /* ./parser//parser.nit:8756 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
-  fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:8758 */
+  /* ./parser//parser.nit:8741 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8758);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8741);
   }
-  /* ./parser//parser.nit:8759 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8767 */
+  /* ./parser//parser.nit:8742 */
+  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:8750 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8768 */
+  /* ./parser//parser.nit:8751 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction262____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8768);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8751);
   }
   REGB0 = ATTR_parser___ReduceAction262____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29465,7 +29433,7 @@ void parser___ReduceAction262___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos255]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8771;
+  fra.me.line = 8754;
   fra.me.meth = LOCATE_parser___ReduceAction262___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -29473,7 +29441,7 @@ void parser___ReduceAction262___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8771 */
+  /* ./parser//parser.nit:8754 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction262____goto(fra.me.REG[1]) = REGB0;
@@ -29487,7 +29455,7 @@ void parser___ReduceAction263___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 = 8775;
+  fra.me.line = 8758;
   fra.me.meth = LOCATE_parser___ReduceAction263___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -29501,53 +29469,58 @@ void parser___ReduceAction263___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8777 */
+  /* ./parser//parser.nit:8760 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8778 */
+  /* ./parser//parser.nit:8761 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8779 */
+  /* ./parser//parser.nit:8762 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8763 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8780 */
+  /* ./parser//parser.nit:8764 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8781 */
+  /* ./parser//parser.nit:8765 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8782 */
+  /* ./parser//parser.nit:8766 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8783 */
+  /* ./parser//parser.nit:8767 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8785 */
+  /* ./parser//parser.nit:8769 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8785);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8769);
   }
-  /* ./parser//parser.nit:8787 */
+  /* ./parser//parser.nit:8771 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8787);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8771);
   }
-  /* ./parser//parser.nit:8789 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* ./parser//parser.nit:8773 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8789);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8773);
   }
-  /* ./parser//parser.nit:8791 */
+  /* ./parser//parser.nit:8774 */
+  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:8776 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8791);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8776);
   }
-  /* ./parser//parser.nit:8792 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8800 */
+  /* ./parser//parser.nit:8777 */
+  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:8785 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8801 */
+  /* ./parser//parser.nit:8786 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction263____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8801);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8786);
   }
   REGB0 = ATTR_parser___ReduceAction263____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29563,7 +29536,7 @@ void parser___ReduceAction263___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos256]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8804;
+  fra.me.line = 8789;
   fra.me.meth = LOCATE_parser___ReduceAction263___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -29571,7 +29544,7 @@ void parser___ReduceAction263___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8804 */
+  /* ./parser//parser.nit:8789 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction263____goto(fra.me.REG[1]) = REGB0;
@@ -29580,15 +29553,15 @@ void parser___ReduceAction263___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction264___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 = 8808;
+  fra.me.line = 8793;
   fra.me.meth = LOCATE_parser___ReduceAction264___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;
@@ -29597,67 +29570,55 @@ void parser___ReduceAction264___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:8810 */
+  /* ./parser//parser.nit:8795 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8811 */
+  /* ./parser//parser.nit:8796 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8812 */
+  /* ./parser//parser.nit:8797 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8813 */
+  /* ./parser//parser.nit:8798 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8814 */
+  /* ./parser//parser.nit:8799 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8815 */
+  /* ./parser//parser.nit:8800 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8816 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8817 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8819 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8819);
-  }
-  /* ./parser//parser.nit:8821 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* ./parser//parser.nit:8801 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8803 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8821);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8803);
   }
-  /* ./parser//parser.nit:8823 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:8805 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8823);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8805);
   }
-  /* ./parser//parser.nit:8824 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
-  fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:8826 */
+  /* ./parser//parser.nit:8807 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8826);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8807);
   }
-  /* ./parser//parser.nit:8828 */
+  /* ./parser//parser.nit:8809 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8828);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8809);
   }
-  /* ./parser//parser.nit:8829 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8837 */
+  /* ./parser//parser.nit:8810 */
+  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:8818 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8838 */
+  /* ./parser//parser.nit:8819 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction264____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8838);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8819);
   }
   REGB0 = ATTR_parser___ReduceAction264____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29673,7 +29634,7 @@ void parser___ReduceAction264___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos257]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8841;
+  fra.me.line = 8822;
   fra.me.meth = LOCATE_parser___ReduceAction264___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -29681,7 +29642,7 @@ void parser___ReduceAction264___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8841 */
+  /* ./parser//parser.nit:8822 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction264____goto(fra.me.REG[1]) = REGB0;
@@ -29690,15 +29651,15 @@ void parser___ReduceAction264___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction265___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[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8845;
+  fra.me.line = 8826;
   fra.me.meth = LOCATE_parser___ReduceAction265___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;
@@ -29706,47 +29667,68 @@ void parser___ReduceAction265___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8847 */
+  /* ./parser//parser.nit:8828 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8848 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8849 */
+  /* ./parser//parser.nit:8829 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8850 */
+  /* ./parser//parser.nit:8830 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8831 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8851 */
+  /* ./parser//parser.nit:8832 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8852 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8854 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* ./parser//parser.nit:8833 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8834 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8835 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8837 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8854);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8837);
   }
-  /* ./parser//parser.nit:8856 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* ./parser//parser.nit:8839 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8856);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8839);
   }
-  /* ./parser//parser.nit:8858 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* ./parser//parser.nit:8841 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8858);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8841);
   }
-  /* ./parser//parser.nit:8859 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8867 */
+  /* ./parser//parser.nit:8842 */
+  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:8844 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8844);
+  }
+  /* ./parser//parser.nit:8846 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8846);
+  }
+  /* ./parser//parser.nit:8847 */
+  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:8855 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8868 */
+  /* ./parser//parser.nit:8856 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction265____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8868);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8856);
   }
   REGB0 = ATTR_parser___ReduceAction265____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29762,7 +29744,7 @@ void parser___ReduceAction265___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos258]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8871;
+  fra.me.line = 8859;
   fra.me.meth = LOCATE_parser___ReduceAction265___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -29770,7 +29752,7 @@ void parser___ReduceAction265___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8871 */
+  /* ./parser//parser.nit:8859 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction265____goto(fra.me.REG[1]) = REGB0;
@@ -29779,15 +29761,15 @@ void parser___ReduceAction265___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction266___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[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 = 8875;
+  fra.me.line = 8863;
   fra.me.meth = LOCATE_parser___ReduceAction266___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;
@@ -29795,59 +29777,47 @@ void parser___ReduceAction266___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:8877 */
+  /* ./parser//parser.nit:8865 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8878 */
+  /* ./parser//parser.nit:8866 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8879 */
+  /* ./parser//parser.nit:8867 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8880 */
+  /* ./parser//parser.nit:8868 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8881 */
+  /* ./parser//parser.nit:8869 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8882 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8883 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8885 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8885);
-  }
-  /* ./parser//parser.nit:8887 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* ./parser//parser.nit:8870 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8872 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8887);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8872);
   }
-  /* ./parser//parser.nit:8889 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:8874 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8889);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8874);
   }
-  /* ./parser//parser.nit:8890 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
-  fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:8892 */
+  /* ./parser//parser.nit:8876 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8892);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8876);
   }
-  /* ./parser//parser.nit:8893 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8901 */
+  /* ./parser//parser.nit:8877 */
+  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:8885 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8902 */
+  /* ./parser//parser.nit:8886 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction266____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8902);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8886);
   }
   REGB0 = ATTR_parser___ReduceAction266____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29863,7 +29833,7 @@ void parser___ReduceAction266___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos259]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8905;
+  fra.me.line = 8889;
   fra.me.meth = LOCATE_parser___ReduceAction266___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -29871,7 +29841,7 @@ void parser___ReduceAction266___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8905 */
+  /* ./parser//parser.nit:8889 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction266____goto(fra.me.REG[1]) = REGB0;
@@ -29880,40 +29850,75 @@ void parser___ReduceAction266___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction267___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 = 8909;
+  fra.me.line = 8893;
   fra.me.meth = LOCATE_parser___ReduceAction267___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8911 */
+  /* ./parser//parser.nit:8895 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8912 */
+  /* ./parser//parser.nit:8896 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8914 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:8897 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8898 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8899 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8900 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8901 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8903 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8914);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8903);
   }
-  /* ./parser//parser.nit:8915 */
-  fra.me.REG[3] = NEW_ASimpleClosureId_parser_prod___ASimpleClosureId___init_asimpleclosureid(fra.me.REG[3]);
-  /* ./parser//parser.nit:8918 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8905 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8905);
+  }
+  /* ./parser//parser.nit:8907 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8907);
+  }
+  /* ./parser//parser.nit:8908 */
+  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:8910 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8910);
+  }
+  /* ./parser//parser.nit:8911 */
+  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL, NIT_NULL);
   /* ./parser//parser.nit:8919 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8920 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction267____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8919);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8920);
   }
   REGB0 = ATTR_parser___ReduceAction267____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29929,7 +29934,7 @@ void parser___ReduceAction267___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos260]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8922;
+  fra.me.line = 8923;
   fra.me.meth = LOCATE_parser___ReduceAction267___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -29937,7 +29942,7 @@ void parser___ReduceAction267___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8922 */
+  /* ./parser//parser.nit:8923 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction267____goto(fra.me.REG[1]) = REGB0;
@@ -29951,7 +29956,7 @@ void parser___ReduceAction268___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 = 8926;
+  fra.me.line = 8927;
   fra.me.meth = LOCATE_parser___ReduceAction268___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29961,25 +29966,25 @@ void parser___ReduceAction268___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:8928 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:8929 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8930 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8931 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  /* ./parser//parser.nit:8932 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8931);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8932);
   }
-  /* ./parser//parser.nit:8932 */
-  fra.me.REG[3] = NEW_ABreakClosureId_parser_prod___ABreakClosureId___init_abreakclosureid(fra.me.REG[3]);
-  /* ./parser//parser.nit:8935 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8933 */
+  fra.me.REG[3] = NEW_ASimpleClosureId_parser_prod___ASimpleClosureId___init_asimpleclosureid(fra.me.REG[3]);
   /* ./parser//parser.nit:8936 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8937 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction268____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8936);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8937);
   }
   REGB0 = ATTR_parser___ReduceAction268____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29995,7 +30000,7 @@ void parser___ReduceAction268___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos261]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8939;
+  fra.me.line = 8940;
   fra.me.meth = LOCATE_parser___ReduceAction268___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -30003,7 +30008,7 @@ void parser___ReduceAction268___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8939 */
+  /* ./parser//parser.nit:8940 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction268____goto(fra.me.REG[1]) = REGB0;
@@ -30017,7 +30022,7 @@ void parser___ReduceAction269___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 = 8943;
+  fra.me.line = 8944;
   fra.me.meth = LOCATE_parser___ReduceAction269___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30027,25 +30032,25 @@ void parser___ReduceAction269___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:8945 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:8946 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8947 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8948 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:8949 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8948);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8949);
   }
-  /* ./parser//parser.nit:8949 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:8954 */
+  /* ./parser//parser.nit:8950 */
+  fra.me.REG[3] = NEW_ABreakClosureId_parser_prod___ABreakClosureId___init_abreakclosureid(fra.me.REG[3]);
+  /* ./parser//parser.nit:8953 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8955 */
+  /* ./parser//parser.nit:8954 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction269____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8955);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8954);
   }
   REGB0 = ATTR_parser___ReduceAction269____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30061,7 +30066,7 @@ void parser___ReduceAction269___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos262]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8958;
+  fra.me.line = 8957;
   fra.me.meth = LOCATE_parser___ReduceAction269___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -30069,7 +30074,7 @@ void parser___ReduceAction269___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8958 */
+  /* ./parser//parser.nit:8957 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction269____goto(fra.me.REG[1]) = REGB0;
@@ -30078,49 +30083,40 @@ void parser___ReduceAction269___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction270___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[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 = 8962;
+  fra.me.line = 8961;
   fra.me.meth = LOCATE_parser___ReduceAction270___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:8964 */
+  /* ./parser//parser.nit:8963 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8965 */
+  /* ./parser//parser.nit:8964 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:8966 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8968 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8968);
-  }
-  /* ./parser//parser.nit:8970 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8970);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8966);
   }
-  /* ./parser//parser.nit:8971 */
-  fra.me.REG[3] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8978 */
+  /* ./parser//parser.nit:8967 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:8972 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8979 */
+  /* ./parser//parser.nit:8973 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction270____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8979);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8973);
   }
   REGB0 = ATTR_parser___ReduceAction270____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30136,7 +30132,7 @@ void parser___ReduceAction270___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos263]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8982;
+  fra.me.line = 8976;
   fra.me.meth = LOCATE_parser___ReduceAction270___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -30144,7 +30140,7 @@ void parser___ReduceAction270___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8982 */
+  /* ./parser//parser.nit:8976 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction270____goto(fra.me.REG[1]) = REGB0;
@@ -30153,58 +30149,49 @@ void parser___ReduceAction270___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction271___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[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 = 8986;
+  fra.me.line = 8980;
   fra.me.meth = LOCATE_parser___ReduceAction271___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:8988 */
+  /* ./parser//parser.nit:8982 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8989 */
+  /* ./parser//parser.nit:8983 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8990 */
+  /* ./parser//parser.nit:8984 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8991 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8993 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8993);
-  }
-  /* ./parser//parser.nit:8995 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:8986 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8995);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8986);
   }
-  /* ./parser//parser.nit:8997 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:8988 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8997);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8988);
   }
-  /* ./parser//parser.nit:8998 */
-  fra.me.REG[3] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:9005 */
+  /* ./parser//parser.nit:8989 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:8996 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9006 */
+  /* ./parser//parser.nit:8997 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction271____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9006);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8997);
   }
   REGB0 = ATTR_parser___ReduceAction271____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30220,7 +30207,7 @@ void parser___ReduceAction271___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos264]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9009;
+  fra.me.line = 9000;
   fra.me.meth = LOCATE_parser___ReduceAction271___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -30228,7 +30215,7 @@ void parser___ReduceAction271___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9009 */
+  /* ./parser//parser.nit:9000 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction271____goto(fra.me.REG[1]) = REGB0;
@@ -30237,69 +30224,58 @@ void parser___ReduceAction271___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction272___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[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 = 9013;
+  fra.me.line = 9004;
   fra.me.meth = LOCATE_parser___ReduceAction272___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:9015 */
+  /* ./parser//parser.nit:9006 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9016 */
+  /* ./parser//parser.nit:9007 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9017 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9018 */
+  /* ./parser//parser.nit:9008 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9019 */
+  /* ./parser//parser.nit:9009 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9020 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9022 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9022);
-  }
-  /* ./parser//parser.nit:9024 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:9011 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9024);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9011);
   }
-  /* ./parser//parser.nit:9026 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  /* ./parser//parser.nit:9013 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9026);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9013);
   }
-  /* ./parser//parser.nit:9028 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9015 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9028);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9015);
   }
-  /* ./parser//parser.nit:9029 */
-  fra.me.REG[3] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9036 */
+  /* ./parser//parser.nit:9016 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:9023 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9037 */
+  /* ./parser//parser.nit:9024 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction272____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9037);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9024);
   }
   REGB0 = ATTR_parser___ReduceAction272____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30315,7 +30291,7 @@ void parser___ReduceAction272___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos265]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9040;
+  fra.me.line = 9027;
   fra.me.meth = LOCATE_parser___ReduceAction272___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -30323,7 +30299,7 @@ void parser___ReduceAction272___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9040 */
+  /* ./parser//parser.nit:9027 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction272____goto(fra.me.REG[1]) = REGB0;
@@ -30332,15 +30308,15 @@ void parser___ReduceAction272___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction273___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[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 = 9044;
+  fra.me.line = 9031;
   fra.me.meth = LOCATE_parser___ReduceAction273___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;
@@ -30348,62 +30324,53 @@ void parser___ReduceAction273___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:9046 */
+  /* ./parser//parser.nit:9033 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9047 */
+  /* ./parser//parser.nit:9034 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9048 */
+  /* ./parser//parser.nit:9035 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9049 */
+  /* ./parser//parser.nit:9036 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9050 */
+  /* ./parser//parser.nit:9037 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9051 */
+  /* ./parser//parser.nit:9038 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9052 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9054 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9054);
-  }
-  /* ./parser//parser.nit:9056 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:9040 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9056);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9040);
   }
-  /* ./parser//parser.nit:9058 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:9042 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9058);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9042);
   }
-  /* ./parser//parser.nit:9060 */
+  /* ./parser//parser.nit:9044 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9060);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9044);
   }
-  /* ./parser//parser.nit:9062 */
+  /* ./parser//parser.nit:9046 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9062);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9046);
   }
-  /* ./parser//parser.nit:9063 */
-  fra.me.REG[3] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9070 */
+  /* ./parser//parser.nit:9047 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9054 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9071 */
+  /* ./parser//parser.nit:9055 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction273____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9071);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9055);
   }
   REGB0 = ATTR_parser___ReduceAction273____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30419,7 +30386,7 @@ void parser___ReduceAction273___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos266]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9074;
+  fra.me.line = 9058;
   fra.me.meth = LOCATE_parser___ReduceAction273___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -30427,7 +30394,7 @@ void parser___ReduceAction273___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9074 */
+  /* ./parser//parser.nit:9058 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction273____goto(fra.me.REG[1]) = REGB0;
@@ -30436,15 +30403,15 @@ void parser___ReduceAction273___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction274___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[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9078;
+  fra.me.line = 9062;
   fra.me.meth = LOCATE_parser___ReduceAction274___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30452,55 +30419,62 @@ void parser___ReduceAction274___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:9080 */
+  /* ./parser//parser.nit:9064 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9081 */
+  /* ./parser//parser.nit:9065 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9082 */
+  /* ./parser//parser.nit:9066 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9067 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9083 */
+  /* ./parser//parser.nit:9068 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9084 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9085 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9086 */
+  /* ./parser//parser.nit:9069 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9088 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9070 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9072 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9088);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9072);
   }
-  /* ./parser//parser.nit:9090 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:9074 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9090);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9074);
   }
-  /* ./parser//parser.nit:9092 */
+  /* ./parser//parser.nit:9076 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9076);
+  }
+  /* ./parser//parser.nit:9078 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9092);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9078);
   }
-  /* ./parser//parser.nit:9094 */
+  /* ./parser//parser.nit:9080 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9094);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9080);
   }
-  /* ./parser//parser.nit:9095 */
-  fra.me.REG[3] = NEW_AAttrAssignExpr_parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9101 */
+  /* ./parser//parser.nit:9081 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9088 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9102 */
+  /* ./parser//parser.nit:9089 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction274____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9102);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9089);
   }
   REGB0 = ATTR_parser___ReduceAction274____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30516,7 +30490,7 @@ void parser___ReduceAction274___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos267]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9105;
+  fra.me.line = 9092;
   fra.me.meth = LOCATE_parser___ReduceAction274___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -30524,7 +30498,7 @@ void parser___ReduceAction274___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9105 */
+  /* ./parser//parser.nit:9092 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction274____goto(fra.me.REG[1]) = REGB0;
@@ -30538,7 +30512,7 @@ void parser___ReduceAction275___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 = 9109;
+  fra.me.line = 9096;
   fra.me.meth = LOCATE_parser___ReduceAction275___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -30551,43 +30525,53 @@ void parser___ReduceAction275___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9111 */
+  /* ./parser//parser.nit:9098 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9112 */
+  /* ./parser//parser.nit:9099 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9113 */
+  /* ./parser//parser.nit:9100 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9114 */
+  /* ./parser//parser.nit:9101 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9115 */
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:9118 */
+  /* ./parser//parser.nit:9102 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9103 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9104 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9106 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9106);
+  }
+  /* ./parser//parser.nit:9108 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9118);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9108);
   }
-  /* ./parser//parser.nit:9120 */
+  /* ./parser//parser.nit:9110 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9120);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9110);
   }
-  /* ./parser//parser.nit:9122 */
+  /* ./parser//parser.nit:9112 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9122);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9112);
   }
-  /* ./parser//parser.nit:9123 */
+  /* ./parser//parser.nit:9113 */
   fra.me.REG[3] = NEW_AAttrAssignExpr_parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9129 */
+  /* ./parser//parser.nit:9119 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9130 */
+  /* ./parser//parser.nit:9120 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction275____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9130);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9120);
   }
   REGB0 = ATTR_parser___ReduceAction275____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30603,7 +30587,7 @@ void parser___ReduceAction275___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos268]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9133;
+  fra.me.line = 9123;
   fra.me.meth = LOCATE_parser___ReduceAction275___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -30611,7 +30595,7 @@ void parser___ReduceAction275___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9133 */
+  /* ./parser//parser.nit:9123 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction275____goto(fra.me.REG[1]) = REGB0;
@@ -30620,15 +30604,15 @@ void parser___ReduceAction275___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction276___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 = 9137;
+  fra.me.line = 9127;
   fra.me.meth = LOCATE_parser___ReduceAction276___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;
@@ -30636,70 +30620,45 @@ void parser___ReduceAction276___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:9139 */
+  /* ./parser//parser.nit:9129 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9140 */
+  /* ./parser//parser.nit:9130 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9141 */
+  /* ./parser//parser.nit:9131 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9142 */
+  /* ./parser//parser.nit:9132 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9143 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9144 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9145 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9146 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9147 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9149 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9149);
-  }
-  /* ./parser//parser.nit:9151 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9151);
-  }
-  /* ./parser//parser.nit:9153 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:9133 */
+  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:9136 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9153);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9136);
   }
-  /* ./parser//parser.nit:9154 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
-  fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:9156 */
+  /* ./parser//parser.nit:9138 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9156);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9138);
   }
-  /* ./parser//parser.nit:9158 */
+  /* ./parser//parser.nit:9140 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9158);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9140);
   }
-  /* ./parser//parser.nit:9159 */
-  fra.me.REG[3] = NEW_ACallAssignExpr_parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9166 */
+  /* ./parser//parser.nit:9141 */
+  fra.me.REG[3] = NEW_AAttrAssignExpr_parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9147 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9167 */
+  /* ./parser//parser.nit:9148 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction276____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9167);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9148);
   }
   REGB0 = ATTR_parser___ReduceAction276____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30715,7 +30674,7 @@ void parser___ReduceAction276___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos269]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9170;
+  fra.me.line = 9151;
   fra.me.meth = LOCATE_parser___ReduceAction276___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -30723,7 +30682,7 @@ void parser___ReduceAction276___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9170 */
+  /* ./parser//parser.nit:9151 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction276____goto(fra.me.REG[1]) = REGB0;
@@ -30737,7 +30696,7 @@ void parser___ReduceAction277___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 = 9174;
+  fra.me.line = 9155;
   fra.me.meth = LOCATE_parser___ReduceAction277___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -30752,56 +30711,66 @@ void parser___ReduceAction277___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:9176 */
+  /* ./parser//parser.nit:9157 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9177 */
+  /* ./parser//parser.nit:9158 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9178 */
+  /* ./parser//parser.nit:9159 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9179 */
+  /* ./parser//parser.nit:9160 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9180 */
+  /* ./parser//parser.nit:9161 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9181 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9182 */
-  fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:9185 */
+  /* ./parser//parser.nit:9162 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9163 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9164 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9165 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:9167 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9167);
+  }
+  /* ./parser//parser.nit:9169 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9185);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9169);
   }
-  /* ./parser//parser.nit:9187 */
+  /* ./parser//parser.nit:9171 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9187);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9171);
   }
-  /* ./parser//parser.nit:9188 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
-  fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:9190 */
+  /* ./parser//parser.nit:9172 */
+  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:9174 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9190);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9174);
   }
-  /* ./parser//parser.nit:9192 */
+  /* ./parser//parser.nit:9176 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9192);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9176);
   }
-  /* ./parser//parser.nit:9193 */
-  fra.me.REG[3] = NEW_ACallAssignExpr_parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[8], fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9200 */
+  /* ./parser//parser.nit:9177 */
+  fra.me.REG[3] = NEW_ACallAssignExpr_parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9184 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9201 */
+  /* ./parser//parser.nit:9185 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction277____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9201);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9185);
   }
   REGB0 = ATTR_parser___ReduceAction277____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30817,7 +30786,7 @@ void parser___ReduceAction277___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos270]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9204;
+  fra.me.line = 9188;
   fra.me.meth = LOCATE_parser___ReduceAction277___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -30825,7 +30794,7 @@ void parser___ReduceAction277___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9204 */
+  /* ./parser//parser.nit:9188 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction277____goto(fra.me.REG[1]) = REGB0;
@@ -30834,15 +30803,15 @@ void parser___ReduceAction277___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction278___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 = 9208;
+  fra.me.line = 9192;
   fra.me.meth = LOCATE_parser___ReduceAction278___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;
@@ -30851,56 +30820,59 @@ void parser___ReduceAction278___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:9210 */
+  /* ./parser//parser.nit:9194 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9211 */
+  /* ./parser//parser.nit:9195 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9212 */
+  /* ./parser//parser.nit:9196 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9213 */
+  /* ./parser//parser.nit:9197 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9214 */
+  /* ./parser//parser.nit:9198 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9215 */
+  /* ./parser//parser.nit:9199 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9217 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9200 */
+  fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:9203 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9203);
   }
-  /* ./parser//parser.nit:9219 */
+  /* ./parser//parser.nit:9205 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9219);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9205);
   }
-  /* ./parser//parser.nit:9220 */
+  /* ./parser//parser.nit:9206 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
   fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:9222 */
+  /* ./parser//parser.nit:9208 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9222);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9208);
   }
-  /* ./parser//parser.nit:9224 */
+  /* ./parser//parser.nit:9210 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9224);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9210);
   }
-  /* ./parser//parser.nit:9225 */
-  fra.me.REG[3] = NEW_ABraAssignExpr_parser_prod___ABraAssignExpr___init_abraassignexpr(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9231 */
+  /* ./parser//parser.nit:9211 */
+  fra.me.REG[3] = NEW_ACallAssignExpr_parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[8], fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9218 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9232 */
+  /* ./parser//parser.nit:9219 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction278____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9232);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9219);
   }
   REGB0 = ATTR_parser___ReduceAction278____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30916,7 +30888,7 @@ void parser___ReduceAction278___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos271]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9235;
+  fra.me.line = 9222;
   fra.me.meth = LOCATE_parser___ReduceAction278___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -30924,7 +30896,7 @@ void parser___ReduceAction278___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9235 */
+  /* ./parser//parser.nit:9222 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction278____goto(fra.me.REG[1]) = REGB0;
@@ -30933,15 +30905,15 @@ void parser___ReduceAction278___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction279___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[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9239;
+  fra.me.line = 9226;
   fra.me.meth = LOCATE_parser___ReduceAction279___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30949,55 +30921,57 @@ void parser___ReduceAction279___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:9241 */
+  /* ./parser//parser.nit:9228 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9242 */
+  /* ./parser//parser.nit:9229 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9243 */
+  /* ./parser//parser.nit:9230 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9244 */
+  /* ./parser//parser.nit:9231 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9245 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9246 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9247 */
+  /* ./parser//parser.nit:9232 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9249 */
+  /* ./parser//parser.nit:9233 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:9235 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9249);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9235);
   }
-  /* ./parser//parser.nit:9251 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:9237 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9251);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9237);
   }
-  /* ./parser//parser.nit:9253 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
+  /* ./parser//parser.nit:9238 */
+  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:9240 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9253);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9240);
   }
-  /* ./parser//parser.nit:9255 */
+  /* ./parser//parser.nit:9242 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9255);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9242);
   }
-  /* ./parser//parser.nit:9256 */
-  fra.me.REG[3] = NEW_AAttrReassignExpr_parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9262 */
+  /* ./parser//parser.nit:9243 */
+  fra.me.REG[3] = NEW_ABraAssignExpr_parser_prod___ABraAssignExpr___init_abraassignexpr(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9249 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9263 */
+  /* ./parser//parser.nit:9250 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction279____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9263);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9250);
   }
   REGB0 = ATTR_parser___ReduceAction279____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31013,7 +30987,7 @@ void parser___ReduceAction279___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos272]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9266;
+  fra.me.line = 9253;
   fra.me.meth = LOCATE_parser___ReduceAction279___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -31021,7 +30995,7 @@ void parser___ReduceAction279___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9266 */
+  /* ./parser//parser.nit:9253 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction279____goto(fra.me.REG[1]) = REGB0;
@@ -31035,7 +31009,7 @@ void parser___ReduceAction280___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 = 9270;
+  fra.me.line = 9257;
   fra.me.meth = LOCATE_parser___ReduceAction280___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -31048,43 +31022,53 @@ void parser___ReduceAction280___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9272 */
+  /* ./parser//parser.nit:9259 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9273 */
+  /* ./parser//parser.nit:9260 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9274 */
+  /* ./parser//parser.nit:9261 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9275 */
+  /* ./parser//parser.nit:9262 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9276 */
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:9279 */
+  /* ./parser//parser.nit:9263 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9264 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9265 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9267 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9267);
+  }
+  /* ./parser//parser.nit:9269 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9279);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9269);
   }
-  /* ./parser//parser.nit:9281 */
+  /* ./parser//parser.nit:9271 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9281);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9271);
   }
-  /* ./parser//parser.nit:9283 */
+  /* ./parser//parser.nit:9273 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9283);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9273);
   }
-  /* ./parser//parser.nit:9284 */
+  /* ./parser//parser.nit:9274 */
   fra.me.REG[3] = NEW_AAttrReassignExpr_parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9290 */
+  /* ./parser//parser.nit:9280 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9291 */
+  /* ./parser//parser.nit:9281 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction280____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9291);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9281);
   }
   REGB0 = ATTR_parser___ReduceAction280____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31100,7 +31084,7 @@ void parser___ReduceAction280___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos273]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9294;
+  fra.me.line = 9284;
   fra.me.meth = LOCATE_parser___ReduceAction280___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -31108,7 +31092,7 @@ void parser___ReduceAction280___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9294 */
+  /* ./parser//parser.nit:9284 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction280____goto(fra.me.REG[1]) = REGB0;
@@ -31117,15 +31101,15 @@ void parser___ReduceAction280___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction281___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 = 9298;
+  fra.me.line = 9288;
   fra.me.meth = LOCATE_parser___ReduceAction281___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;
@@ -31133,70 +31117,45 @@ void parser___ReduceAction281___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:9300 */
+  /* ./parser//parser.nit:9290 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9301 */
+  /* ./parser//parser.nit:9291 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9302 */
+  /* ./parser//parser.nit:9292 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9303 */
+  /* ./parser//parser.nit:9293 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9304 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9305 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9306 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9307 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9308 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9310 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9310);
-  }
-  /* ./parser//parser.nit:9312 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9312);
-  }
-  /* ./parser//parser.nit:9314 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:9294 */
+  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:9297 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9314);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9297);
   }
-  /* ./parser//parser.nit:9315 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
-  fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:9317 */
+  /* ./parser//parser.nit:9299 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9317);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9299);
   }
-  /* ./parser//parser.nit:9319 */
+  /* ./parser//parser.nit:9301 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9319);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9301);
   }
-  /* ./parser//parser.nit:9320 */
-  fra.me.REG[3] = NEW_ACallReassignExpr_parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9327 */
+  /* ./parser//parser.nit:9302 */
+  fra.me.REG[3] = NEW_AAttrReassignExpr_parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9308 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9328 */
+  /* ./parser//parser.nit:9309 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction281____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9328);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9309);
   }
   REGB0 = ATTR_parser___ReduceAction281____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31212,7 +31171,7 @@ void parser___ReduceAction281___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos274]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9331;
+  fra.me.line = 9312;
   fra.me.meth = LOCATE_parser___ReduceAction281___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -31220,7 +31179,7 @@ void parser___ReduceAction281___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9331 */
+  /* ./parser//parser.nit:9312 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction281____goto(fra.me.REG[1]) = REGB0;
@@ -31234,7 +31193,7 @@ void parser___ReduceAction282___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 = 9335;
+  fra.me.line = 9316;
   fra.me.meth = LOCATE_parser___ReduceAction282___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -31249,56 +31208,66 @@ void parser___ReduceAction282___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:9337 */
+  /* ./parser//parser.nit:9318 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9338 */
+  /* ./parser//parser.nit:9319 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9339 */
+  /* ./parser//parser.nit:9320 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9340 */
+  /* ./parser//parser.nit:9321 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9341 */
+  /* ./parser//parser.nit:9322 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9342 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9343 */
-  fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:9346 */
+  /* ./parser//parser.nit:9323 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9324 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9325 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9326 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:9328 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9328);
+  }
+  /* ./parser//parser.nit:9330 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9346);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9330);
   }
-  /* ./parser//parser.nit:9348 */
+  /* ./parser//parser.nit:9332 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9348);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9332);
   }
-  /* ./parser//parser.nit:9349 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
-  fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:9351 */
+  /* ./parser//parser.nit:9333 */
+  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:9335 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9351);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9335);
   }
-  /* ./parser//parser.nit:9353 */
+  /* ./parser//parser.nit:9337 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9353);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9337);
   }
-  /* ./parser//parser.nit:9354 */
-  fra.me.REG[3] = NEW_ACallReassignExpr_parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[8], fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9361 */
+  /* ./parser//parser.nit:9338 */
+  fra.me.REG[3] = NEW_ACallReassignExpr_parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9345 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9362 */
+  /* ./parser//parser.nit:9346 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction282____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9362);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9346);
   }
   REGB0 = ATTR_parser___ReduceAction282____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31314,7 +31283,7 @@ void parser___ReduceAction282___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos275]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9365;
+  fra.me.line = 9349;
   fra.me.meth = LOCATE_parser___ReduceAction282___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -31322,7 +31291,7 @@ void parser___ReduceAction282___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9365 */
+  /* ./parser//parser.nit:9349 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction282____goto(fra.me.REG[1]) = REGB0;
@@ -31331,15 +31300,15 @@ void parser___ReduceAction282___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction283___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 = 9369;
+  fra.me.line = 9353;
   fra.me.meth = LOCATE_parser___ReduceAction283___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;
@@ -31348,56 +31317,59 @@ void parser___ReduceAction283___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:9371 */
+  /* ./parser//parser.nit:9355 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9372 */
+  /* ./parser//parser.nit:9356 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9373 */
+  /* ./parser//parser.nit:9357 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9374 */
+  /* ./parser//parser.nit:9358 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9375 */
+  /* ./parser//parser.nit:9359 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9376 */
+  /* ./parser//parser.nit:9360 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9378 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9361 */
+  fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:9364 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9378);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9364);
   }
-  /* ./parser//parser.nit:9380 */
+  /* ./parser//parser.nit:9366 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9380);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9366);
   }
-  /* ./parser//parser.nit:9381 */
+  /* ./parser//parser.nit:9367 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
   fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:9383 */
+  /* ./parser//parser.nit:9369 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9383);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9369);
   }
-  /* ./parser//parser.nit:9385 */
+  /* ./parser//parser.nit:9371 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9385);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9371);
   }
-  /* ./parser//parser.nit:9386 */
-  fra.me.REG[3] = NEW_ABraReassignExpr_parser_prod___ABraReassignExpr___init_abrareassignexpr(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9392 */
+  /* ./parser//parser.nit:9372 */
+  fra.me.REG[3] = NEW_ACallReassignExpr_parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[8], fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9379 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9393 */
+  /* ./parser//parser.nit:9380 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction283____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9393);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9380);
   }
   REGB0 = ATTR_parser___ReduceAction283____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31413,7 +31385,7 @@ void parser___ReduceAction283___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos276]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9396;
+  fra.me.line = 9383;
   fra.me.meth = LOCATE_parser___ReduceAction283___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -31421,7 +31393,7 @@ void parser___ReduceAction283___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9396 */
+  /* ./parser//parser.nit:9383 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction283____goto(fra.me.REG[1]) = REGB0;
@@ -31430,40 +31402,73 @@ void parser___ReduceAction283___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction284___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 = 9400;
+  fra.me.line = 9387;
   fra.me.meth = LOCATE_parser___ReduceAction284___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9402 */
+  /* ./parser//parser.nit:9389 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9403 */
+  /* ./parser//parser.nit:9390 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9405 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPluseq, ID_TPluseq)) /*cast nullable TPluseq*/;
+  /* ./parser//parser.nit:9391 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9392 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9393 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9394 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:9396 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9405);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9396);
   }
-  /* ./parser//parser.nit:9406 */
-  fra.me.REG[3] = NEW_APlusAssignOp_parser_prod___APlusAssignOp___init_aplusassignop(fra.me.REG[3]);
-  /* ./parser//parser.nit:9409 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9398 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9398);
+  }
+  /* ./parser//parser.nit:9399 */
+  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:9401 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9401);
+  }
+  /* ./parser//parser.nit:9403 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9403);
+  }
+  /* ./parser//parser.nit:9404 */
+  fra.me.REG[3] = NEW_ABraReassignExpr_parser_prod___ABraReassignExpr___init_abrareassignexpr(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:9410 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9411 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction284____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9410);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9411);
   }
   REGB0 = ATTR_parser___ReduceAction284____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31479,7 +31484,7 @@ void parser___ReduceAction284___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos277]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9413;
+  fra.me.line = 9414;
   fra.me.meth = LOCATE_parser___ReduceAction284___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -31487,7 +31492,7 @@ void parser___ReduceAction284___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9413 */
+  /* ./parser//parser.nit:9414 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction284____goto(fra.me.REG[1]) = REGB0;
@@ -31501,7 +31506,7 @@ void parser___ReduceAction285___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 = 9417;
+  fra.me.line = 9418;
   fra.me.meth = LOCATE_parser___ReduceAction285___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -31511,25 +31516,25 @@ void parser___ReduceAction285___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:9419 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:9420 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9421 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9422 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TMinuseq, ID_TMinuseq)) /*cast nullable TMinuseq*/;
+  /* ./parser//parser.nit:9423 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPluseq, ID_TPluseq)) /*cast nullable TPluseq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9422);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9423);
   }
-  /* ./parser//parser.nit:9423 */
-  fra.me.REG[3] = NEW_AMinusAssignOp_parser_prod___AMinusAssignOp___init_aminusassignop(fra.me.REG[3]);
-  /* ./parser//parser.nit:9426 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9424 */
+  fra.me.REG[3] = NEW_APlusAssignOp_parser_prod___APlusAssignOp___init_aplusassignop(fra.me.REG[3]);
   /* ./parser//parser.nit:9427 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9428 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction285____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9427);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9428);
   }
   REGB0 = ATTR_parser___ReduceAction285____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31545,7 +31550,7 @@ void parser___ReduceAction285___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos278]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9430;
+  fra.me.line = 9431;
   fra.me.meth = LOCATE_parser___ReduceAction285___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -31553,7 +31558,7 @@ void parser___ReduceAction285___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9430 */
+  /* ./parser//parser.nit:9431 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction285____goto(fra.me.REG[1]) = REGB0;
@@ -31562,58 +31567,40 @@ void parser___ReduceAction285___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction286___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[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 = 9434;
+  fra.me.line = 9435;
   fra.me.meth = LOCATE_parser___ReduceAction286___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:9436 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:9437 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:9438 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9439 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9441 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9441);
-  }
-  /* ./parser//parser.nit:9443 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9443);
-  }
-  /* ./parser//parser.nit:9445 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9440 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TMinuseq, ID_TMinuseq)) /*cast nullable TMinuseq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9445);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9440);
   }
-  /* ./parser//parser.nit:9446 */
-  fra.me.REG[3] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9451 */
+  /* ./parser//parser.nit:9441 */
+  fra.me.REG[3] = NEW_AMinusAssignOp_parser_prod___AMinusAssignOp___init_aminusassignop(fra.me.REG[3]);
+  /* ./parser//parser.nit:9444 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9452 */
+  /* ./parser//parser.nit:9445 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction286____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9452);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9445);
   }
   REGB0 = ATTR_parser___ReduceAction286____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31629,7 +31616,7 @@ void parser___ReduceAction286___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos279]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9455;
+  fra.me.line = 9448;
   fra.me.meth = LOCATE_parser___ReduceAction286___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -31637,7 +31624,7 @@ void parser___ReduceAction286___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9455 */
+  /* ./parser//parser.nit:9448 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction286____goto(fra.me.REG[1]) = REGB0;
@@ -31646,49 +31633,58 @@ void parser___ReduceAction286___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction287___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[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 = 9459;
+  fra.me.line = 9452;
   fra.me.meth = LOCATE_parser___ReduceAction287___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:9461 */
+  /* ./parser//parser.nit:9454 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9462 */
+  /* ./parser//parser.nit:9455 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9463 */
+  /* ./parser//parser.nit:9456 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9465 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* ./parser//parser.nit:9457 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9459 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9465);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9459);
   }
-  /* ./parser//parser.nit:9467 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9461 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9467);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9461);
   }
-  /* ./parser//parser.nit:9468 */
-  fra.me.REG[3] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9473 */
+  /* ./parser//parser.nit:9463 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9463);
+  }
+  /* ./parser//parser.nit:9464 */
+  fra.me.REG[3] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9469 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9474 */
+  /* ./parser//parser.nit:9470 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction287____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9474);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9470);
   }
   REGB0 = ATTR_parser___ReduceAction287____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31704,7 +31700,7 @@ void parser___ReduceAction287___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos280]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9477;
+  fra.me.line = 9473;
   fra.me.meth = LOCATE_parser___ReduceAction287___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -31712,7 +31708,7 @@ void parser___ReduceAction287___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9477 */
+  /* ./parser//parser.nit:9473 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction287____goto(fra.me.REG[1]) = REGB0;
@@ -31721,75 +31717,49 @@ void parser___ReduceAction287___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction288___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[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 = 9481;
+  fra.me.line = 9477;
   fra.me.meth = LOCATE_parser___ReduceAction288___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:9483 */
+  /* ./parser//parser.nit:9479 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9484 */
+  /* ./parser//parser.nit:9480 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9485 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9486 */
+  /* ./parser//parser.nit:9481 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9487 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9488 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9489 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9490 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9491 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9493 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9493);
-  }
-  /* ./parser//parser.nit:9495 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9495);
-  }
-  /* ./parser//parser.nit:9497 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9483 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9497);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9483);
   }
-  /* ./parser//parser.nit:9499 */
+  /* ./parser//parser.nit:9485 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9499);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9485);
   }
-  /* ./parser//parser.nit:9500 */
-  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9506 */
+  /* ./parser//parser.nit:9486 */
+  fra.me.REG[3] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:9491 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9507 */
+  /* ./parser//parser.nit:9492 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction288____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9507);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9492);
   }
   REGB0 = ATTR_parser___ReduceAction288____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31805,7 +31775,7 @@ void parser___ReduceAction288___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos281]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9510;
+  fra.me.line = 9495;
   fra.me.meth = LOCATE_parser___ReduceAction288___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -31813,7 +31783,7 @@ void parser___ReduceAction288___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9510 */
+  /* ./parser//parser.nit:9495 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction288____goto(fra.me.REG[1]) = REGB0;
@@ -31822,64 +31792,75 @@ void parser___ReduceAction288___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction289___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 = 9514;
+  fra.me.line = 9499;
   fra.me.meth = LOCATE_parser___ReduceAction289___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:9516 */
+  /* ./parser//parser.nit:9501 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9517 */
+  /* ./parser//parser.nit:9502 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9518 */
+  /* ./parser//parser.nit:9503 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9519 */
+  /* ./parser//parser.nit:9504 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9520 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9521 */
+  /* ./parser//parser.nit:9505 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9522 */
+  /* ./parser//parser.nit:9506 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9524 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
+  /* ./parser//parser.nit:9507 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9508 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9509 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9511 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9511);
+  }
+  /* ./parser//parser.nit:9513 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9524);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9513);
   }
-  /* ./parser//parser.nit:9526 */
+  /* ./parser//parser.nit:9515 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9526);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9515);
   }
-  /* ./parser//parser.nit:9528 */
+  /* ./parser//parser.nit:9517 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9528);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9517);
   }
-  /* ./parser//parser.nit:9529 */
-  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9535 */
+  /* ./parser//parser.nit:9518 */
+  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9524 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9536 */
+  /* ./parser//parser.nit:9525 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction289____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9536);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9525);
   }
   REGB0 = ATTR_parser___ReduceAction289____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31895,7 +31876,7 @@ void parser___ReduceAction289___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos282]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9539;
+  fra.me.line = 9528;
   fra.me.meth = LOCATE_parser___ReduceAction289___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -31903,7 +31884,7 @@ void parser___ReduceAction289___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9539 */
+  /* ./parser//parser.nit:9528 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction289____goto(fra.me.REG[1]) = REGB0;
@@ -31912,75 +31893,64 @@ void parser___ReduceAction289___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction290___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[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 = 9543;
+  fra.me.line = 9532;
   fra.me.meth = LOCATE_parser___ReduceAction290___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:9545 */
+  /* ./parser//parser.nit:9534 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9546 */
+  /* ./parser//parser.nit:9535 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9547 */
+  /* ./parser//parser.nit:9536 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9548 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9549 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9550 */
+  /* ./parser//parser.nit:9537 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9538 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9539 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9551 */
+  /* ./parser//parser.nit:9540 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9552 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9553 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9555 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9555);
-  }
-  /* ./parser//parser.nit:9557 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9542 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9557);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9542);
   }
-  /* ./parser//parser.nit:9559 */
+  /* ./parser//parser.nit:9544 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9559);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9544);
   }
-  /* ./parser//parser.nit:9561 */
+  /* ./parser//parser.nit:9546 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9561);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9546);
   }
-  /* ./parser//parser.nit:9562 */
-  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9568 */
+  /* ./parser//parser.nit:9547 */
+  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:9553 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9569 */
+  /* ./parser//parser.nit:9554 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction290____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9569);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9554);
   }
   REGB0 = ATTR_parser___ReduceAction290____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31996,7 +31966,7 @@ void parser___ReduceAction290___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos283]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9572;
+  fra.me.line = 9557;
   fra.me.meth = LOCATE_parser___ReduceAction290___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -32004,7 +31974,7 @@ void parser___ReduceAction290___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9572 */
+  /* ./parser//parser.nit:9557 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction290____goto(fra.me.REG[1]) = REGB0;
@@ -32013,64 +31983,75 @@ void parser___ReduceAction290___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction291___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 = 9576;
+  fra.me.line = 9561;
   fra.me.meth = LOCATE_parser___ReduceAction291___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:9578 */
+  /* ./parser//parser.nit:9563 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9579 */
+  /* ./parser//parser.nit:9564 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9580 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9581 */
+  /* ./parser//parser.nit:9565 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9582 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9583 */
+  /* ./parser//parser.nit:9566 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9584 */
+  /* ./parser//parser.nit:9567 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9586 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
+  /* ./parser//parser.nit:9568 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9569 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9570 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9571 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9573 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9586);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9573);
   }
-  /* ./parser//parser.nit:9588 */
+  /* ./parser//parser.nit:9575 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9575);
+  }
+  /* ./parser//parser.nit:9577 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9588);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9577);
   }
-  /* ./parser//parser.nit:9590 */
+  /* ./parser//parser.nit:9579 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9590);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9579);
   }
-  /* ./parser//parser.nit:9591 */
-  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:9597 */
+  /* ./parser//parser.nit:9580 */
+  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9586 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9598 */
+  /* ./parser//parser.nit:9587 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction291____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9598);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9587);
   }
   REGB0 = ATTR_parser___ReduceAction291____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32086,7 +32067,7 @@ void parser___ReduceAction291___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos284]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9601;
+  fra.me.line = 9590;
   fra.me.meth = LOCATE_parser___ReduceAction291___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -32094,7 +32075,7 @@ void parser___ReduceAction291___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9601 */
+  /* ./parser//parser.nit:9590 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction291____goto(fra.me.REG[1]) = REGB0;
@@ -32108,7 +32089,7 @@ void parser___ReduceAction292___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 = 9605;
+  fra.me.line = 9594;
   fra.me.meth = LOCATE_parser___ReduceAction292___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -32120,49 +32101,47 @@ void parser___ReduceAction292___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9607 */
+  /* ./parser//parser.nit:9596 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9608 */
+  /* ./parser//parser.nit:9597 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9609 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9610 */
+  /* ./parser//parser.nit:9598 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9611 */
+  /* ./parser//parser.nit:9599 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9612 */
+  /* ./parser//parser.nit:9600 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9613 */
+  /* ./parser//parser.nit:9601 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9614 */
+  /* ./parser//parser.nit:9602 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9616 */
+  /* ./parser//parser.nit:9604 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9616);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9604);
   }
-  /* ./parser//parser.nit:9618 */
+  /* ./parser//parser.nit:9606 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9618);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9606);
   }
-  /* ./parser//parser.nit:9620 */
+  /* ./parser//parser.nit:9608 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9620);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9608);
   }
-  /* ./parser//parser.nit:9621 */
+  /* ./parser//parser.nit:9609 */
   fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:9627 */
+  /* ./parser//parser.nit:9615 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9628 */
+  /* ./parser//parser.nit:9616 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction292____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9628);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9616);
   }
   REGB0 = ATTR_parser___ReduceAction292____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32178,7 +32157,7 @@ void parser___ReduceAction292___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos285]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9631;
+  fra.me.line = 9619;
   fra.me.meth = LOCATE_parser___ReduceAction292___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -32186,7 +32165,7 @@ void parser___ReduceAction292___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9631 */
+  /* ./parser//parser.nit:9619 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction292____goto(fra.me.REG[1]) = REGB0;
@@ -32194,14 +32173,14 @@ void parser___ReduceAction292___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos285] = 1;
   return;
 }
-void parser___ReduceAction295___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 = 9635;
-  fra.me.meth = LOCATE_parser___ReduceAction295___action;
+  fra.me.line = 9623;
+  fra.me.meth = LOCATE_parser___ReduceAction293___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -32212,116 +32191,133 @@ void parser___ReduceAction295___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9637 */
+  /* ./parser//parser.nit:9625 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9638 */
+  /* ./parser//parser.nit:9626 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9639 */
+  /* ./parser//parser.nit:9627 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9640 */
+  /* ./parser//parser.nit:9628 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9629 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9630 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9631 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9642 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
+  /* ./parser//parser.nit:9632 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9634 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9642);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9634);
   }
-  /* ./parser//parser.nit:9644 */
+  /* ./parser//parser.nit:9636 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9644);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9636);
   }
-  /* ./parser//parser.nit:9646 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* ./parser//parser.nit:9638 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9646);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9638);
   }
-  /* ./parser//parser.nit:9647 */
-  fra.me.REG[3] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9652 */
+  /* ./parser//parser.nit:9639 */
+  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:9645 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9653 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction295____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:9646 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction293____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9653);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9646);
   }
-  REGB0 = ATTR_parser___ReduceAction295____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction293____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction295___init(val_t p0, val_t p1, int* init_table){
-  int itpos286 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction295].i;
+void parser___ReduceAction293___init(val_t p0, val_t p1, int* init_table){
+  int itpos286 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction293].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos286]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9656;
-  fra.me.meth = LOCATE_parser___ReduceAction295___init;
+  fra.me.line = 9649;
+  fra.me.meth = LOCATE_parser___ReduceAction293___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9656 */
+  /* ./parser//parser.nit:9649 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction295____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction293____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos286] = 1;
   return;
 }
 void parser___ReduceAction296___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  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 = 9660;
+  fra.me.line = 9653;
   fra.me.meth = LOCATE_parser___ReduceAction296___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:9662 */
+  /* ./parser//parser.nit:9655 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9663 */
+  /* ./parser//parser.nit:9656 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9664 */
+  /* ./parser//parser.nit:9657 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9666 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
+  /* ./parser//parser.nit:9658 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9660 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9666);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9660);
   }
-  /* ./parser//parser.nit:9668 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9662 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9668);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9662);
   }
-  /* ./parser//parser.nit:9669 */
-  fra.me.REG[3] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9674 */
+  /* ./parser//parser.nit:9664 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9664);
+  }
+  /* ./parser//parser.nit:9665 */
+  fra.me.REG[3] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9670 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9675 */
+  /* ./parser//parser.nit:9671 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction296____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9675);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9671);
   }
   REGB0 = ATTR_parser___ReduceAction296____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32337,7 +32333,7 @@ void parser___ReduceAction296___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos287]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9678;
+  fra.me.line = 9674;
   fra.me.meth = LOCATE_parser___ReduceAction296___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -32345,7 +32341,7 @@ void parser___ReduceAction296___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9678 */
+  /* ./parser//parser.nit:9674 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction296____goto(fra.me.REG[1]) = REGB0;
@@ -32354,80 +32350,49 @@ void parser___ReduceAction296___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction297___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[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 = 9682;
+  fra.me.line = 9678;
   fra.me.meth = LOCATE_parser___ReduceAction297___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9684 */
+  /* ./parser//parser.nit:9680 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9685 */
+  /* ./parser//parser.nit:9681 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9686 */
+  /* ./parser//parser.nit:9682 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9687 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9688 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9689 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9690 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9691 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9693 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9693);
-  }
-  /* ./parser//parser.nit:9695 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9695);
-  }
-  /* ./parser//parser.nit:9697 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9697);
-  }
-  /* ./parser//parser.nit:9699 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9684 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9699);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9684);
   }
-  /* ./parser//parser.nit:9701 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* ./parser//parser.nit:9686 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9701);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9686);
   }
-  /* ./parser//parser.nit:9702 */
-  fra.me.REG[3] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9709 */
+  /* ./parser//parser.nit:9687 */
+  fra.me.REG[3] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:9692 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9710 */
+  /* ./parser//parser.nit:9693 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction297____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9710);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9693);
   }
   REGB0 = ATTR_parser___ReduceAction297____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32443,7 +32408,7 @@ void parser___ReduceAction297___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos288]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9713;
+  fra.me.line = 9696;
   fra.me.meth = LOCATE_parser___ReduceAction297___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -32451,7 +32416,7 @@ void parser___ReduceAction297___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9713 */
+  /* ./parser//parser.nit:9696 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction297____goto(fra.me.REG[1]) = REGB0;
@@ -32460,15 +32425,15 @@ void parser___ReduceAction297___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction298___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[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9717;
+  fra.me.line = 9700;
   fra.me.meth = LOCATE_parser___ReduceAction298___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32476,55 +32441,64 @@ void parser___ReduceAction298___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:9719 */
+  /* ./parser//parser.nit:9702 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9720 */
+  /* ./parser//parser.nit:9703 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9721 */
+  /* ./parser//parser.nit:9704 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9722 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9723 */
+  /* ./parser//parser.nit:9705 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9724 */
+  /* ./parser//parser.nit:9706 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9725 */
+  /* ./parser//parser.nit:9707 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9727 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
+  /* ./parser//parser.nit:9708 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9709 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9711 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9727);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9711);
   }
-  /* ./parser//parser.nit:9729 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9713 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9729);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9713);
   }
-  /* ./parser//parser.nit:9731 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* ./parser//parser.nit:9715 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9731);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9715);
   }
-  /* ./parser//parser.nit:9733 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9717 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9733);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9717);
   }
-  /* ./parser//parser.nit:9734 */
-  fra.me.REG[3] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9741 */
+  /* ./parser//parser.nit:9719 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9719);
+  }
+  /* ./parser//parser.nit:9720 */
+  fra.me.REG[3] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9727 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9742 */
+  /* ./parser//parser.nit:9728 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction298____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9742);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9728);
   }
   REGB0 = ATTR_parser___ReduceAction298____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32540,7 +32514,7 @@ void parser___ReduceAction298___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos289]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9745;
+  fra.me.line = 9731;
   fra.me.meth = LOCATE_parser___ReduceAction298___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -32548,7 +32522,7 @@ void parser___ReduceAction298___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9745 */
+  /* ./parser//parser.nit:9731 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction298____goto(fra.me.REG[1]) = REGB0;
@@ -32557,15 +32531,15 @@ void parser___ReduceAction298___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction299___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 = 9749;
+  fra.me.line = 9735;
   fra.me.meth = LOCATE_parser___ReduceAction299___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;
@@ -32573,79 +32547,55 @@ void parser___ReduceAction299___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:9751 */
+  /* ./parser//parser.nit:9737 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9752 */
+  /* ./parser//parser.nit:9738 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9753 */
+  /* ./parser//parser.nit:9739 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9754 */
+  /* ./parser//parser.nit:9740 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9755 */
+  /* ./parser//parser.nit:9741 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9742 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9756 */
+  /* ./parser//parser.nit:9743 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9757 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9758 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9759 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9760 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9761 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9762 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9764 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9764);
-  }
-  /* ./parser//parser.nit:9766 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9766);
-  }
-  /* ./parser//parser.nit:9768 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9745 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9768);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9745);
   }
-  /* ./parser//parser.nit:9770 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* ./parser//parser.nit:9747 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9770);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9747);
   }
-  /* ./parser//parser.nit:9772 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9749 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9772);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9749);
   }
-  /* ./parser//parser.nit:9774 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* ./parser//parser.nit:9751 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9774);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9751);
   }
-  /* ./parser//parser.nit:9775 */
-  fra.me.REG[3] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9783 */
+  /* ./parser//parser.nit:9752 */
+  fra.me.REG[3] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:9759 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9784 */
+  /* ./parser//parser.nit:9760 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction299____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9784);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9760);
   }
   REGB0 = ATTR_parser___ReduceAction299____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32661,7 +32611,7 @@ void parser___ReduceAction299___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos290]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9787;
+  fra.me.line = 9763;
   fra.me.meth = LOCATE_parser___ReduceAction299___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -32669,7 +32619,7 @@ void parser___ReduceAction299___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9787 */
+  /* ./parser//parser.nit:9763 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction299____goto(fra.me.REG[1]) = REGB0;
@@ -32678,15 +32628,15 @@ void parser___ReduceAction299___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction300___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 = 9791;
+  fra.me.line = 9767;
   fra.me.meth = LOCATE_parser___ReduceAction300___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;
@@ -32695,69 +32645,78 @@ void parser___ReduceAction300___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9793 */
+  /* ./parser//parser.nit:9769 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9794 */
+  /* ./parser//parser.nit:9770 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9795 */
+  /* ./parser//parser.nit:9771 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9796 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9797 */
+  /* ./parser//parser.nit:9772 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9798 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9799 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9800 */
+  /* ./parser//parser.nit:9773 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9801 */
+  /* ./parser//parser.nit:9774 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9802 */
+  /* ./parser//parser.nit:9775 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9803 */
+  /* ./parser//parser.nit:9776 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9805 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
+  /* ./parser//parser.nit:9777 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9778 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9779 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9780 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9782 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9805);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9782);
   }
-  /* ./parser//parser.nit:9807 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:9784 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9807);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9784);
   }
-  /* ./parser//parser.nit:9809 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9786 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9809);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9786);
   }
-  /* ./parser//parser.nit:9811 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* ./parser//parser.nit:9788 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9811);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9788);
   }
-  /* ./parser//parser.nit:9813 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9790 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9813);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9790);
   }
-  /* ./parser//parser.nit:9814 */
-  fra.me.REG[3] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9822 */
+  /* ./parser//parser.nit:9792 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9792);
+  }
+  /* ./parser//parser.nit:9793 */
+  fra.me.REG[3] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9801 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9823 */
+  /* ./parser//parser.nit:9802 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction300____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9823);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9802);
   }
   REGB0 = ATTR_parser___ReduceAction300____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32773,7 +32732,7 @@ void parser___ReduceAction300___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos291]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9826;
+  fra.me.line = 9805;
   fra.me.meth = LOCATE_parser___ReduceAction300___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -32781,7 +32740,7 @@ void parser___ReduceAction300___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9826 */
+  /* ./parser//parser.nit:9805 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction300____goto(fra.me.REG[1]) = REGB0;
@@ -32790,60 +32749,86 @@ void parser___ReduceAction300___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction301___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[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9830;
+  fra.me.line = 9809;
   fra.me.meth = LOCATE_parser___ReduceAction301___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:9832 */
+  /* ./parser//parser.nit:9811 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9833 */
+  /* ./parser//parser.nit:9812 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9834 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9835 */
+  /* ./parser//parser.nit:9813 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9836 */
+  /* ./parser//parser.nit:9814 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9838 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
+  /* ./parser//parser.nit:9815 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9816 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9817 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9818 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9819 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9820 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9821 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9823 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9838);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9823);
   }
-  /* ./parser//parser.nit:9840 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:9825 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9840);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9825);
   }
-  /* ./parser//parser.nit:9842 */
+  /* ./parser//parser.nit:9827 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9827);
+  }
+  /* ./parser//parser.nit:9829 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9829);
+  }
+  /* ./parser//parser.nit:9831 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9842);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9831);
   }
-  /* ./parser//parser.nit:9843 */
-  fra.me.REG[3] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9849 */
+  /* ./parser//parser.nit:9832 */
+  fra.me.REG[3] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:9840 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9850 */
+  /* ./parser//parser.nit:9841 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction301____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9850);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9841);
   }
   REGB0 = ATTR_parser___ReduceAction301____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32859,7 +32844,7 @@ void parser___ReduceAction301___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos292]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9853;
+  fra.me.line = 9844;
   fra.me.meth = LOCATE_parser___ReduceAction301___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -32867,7 +32852,7 @@ void parser___ReduceAction301___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9853 */
+  /* ./parser//parser.nit:9844 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction301____goto(fra.me.REG[1]) = REGB0;
@@ -32876,69 +32861,60 @@ void parser___ReduceAction301___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction302___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[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 = 9857;
+  fra.me.line = 9848;
   fra.me.meth = LOCATE_parser___ReduceAction302___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:9859 */
+  /* ./parser//parser.nit:9850 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9860 */
+  /* ./parser//parser.nit:9851 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9861 */
+  /* ./parser//parser.nit:9852 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9862 */
+  /* ./parser//parser.nit:9853 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9863 */
+  /* ./parser//parser.nit:9854 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9864 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9866 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9866);
-  }
-  /* ./parser//parser.nit:9868 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:9856 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9868);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9856);
   }
-  /* ./parser//parser.nit:9870 */
+  /* ./parser//parser.nit:9858 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9870);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9858);
   }
-  /* ./parser//parser.nit:9872 */
+  /* ./parser//parser.nit:9860 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9872);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9860);
   }
-  /* ./parser//parser.nit:9873 */
-  fra.me.REG[3] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9879 */
+  /* ./parser//parser.nit:9861 */
+  fra.me.REG[3] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9867 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9880 */
+  /* ./parser//parser.nit:9868 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction302____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9880);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9868);
   }
   REGB0 = ATTR_parser___ReduceAction302____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32954,7 +32930,7 @@ void parser___ReduceAction302___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos293]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9883;
+  fra.me.line = 9871;
   fra.me.meth = LOCATE_parser___ReduceAction302___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -32962,7 +32938,7 @@ void parser___ReduceAction302___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9883 */
+  /* ./parser//parser.nit:9871 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction302____goto(fra.me.REG[1]) = REGB0;
@@ -32971,49 +32947,69 @@ void parser___ReduceAction302___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction303___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[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 = 9887;
+  fra.me.line = 9875;
   fra.me.meth = LOCATE_parser___ReduceAction303___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:9889 */
+  /* ./parser//parser.nit:9877 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9890 */
+  /* ./parser//parser.nit:9878 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9891 */
+  /* ./parser//parser.nit:9879 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9893 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
+  /* ./parser//parser.nit:9880 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9881 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9882 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9884 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9884);
+  }
+  /* ./parser//parser.nit:9886 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9886);
+  }
+  /* ./parser//parser.nit:9888 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9893);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9888);
   }
-  /* ./parser//parser.nit:9895 */
+  /* ./parser//parser.nit:9890 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9895);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9890);
   }
-  /* ./parser//parser.nit:9896 */
-  fra.me.REG[3] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9902 */
+  /* ./parser//parser.nit:9891 */
+  fra.me.REG[3] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9897 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9903 */
+  /* ./parser//parser.nit:9898 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction303____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9903);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9898);
   }
   REGB0 = ATTR_parser___ReduceAction303____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33029,7 +33025,7 @@ void parser___ReduceAction303___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos294]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9906;
+  fra.me.line = 9901;
   fra.me.meth = LOCATE_parser___ReduceAction303___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -33037,7 +33033,7 @@ void parser___ReduceAction303___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9906 */
+  /* ./parser//parser.nit:9901 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction303____goto(fra.me.REG[1]) = REGB0;
@@ -33046,58 +33042,49 @@ void parser___ReduceAction303___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction304___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[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 = 9910;
+  fra.me.line = 9905;
   fra.me.meth = LOCATE_parser___ReduceAction304___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:9912 */
+  /* ./parser//parser.nit:9907 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9913 */
+  /* ./parser//parser.nit:9908 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9914 */
+  /* ./parser//parser.nit:9909 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9915 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9917 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9917);
-  }
-  /* ./parser//parser.nit:9919 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:9911 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9919);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9911);
   }
-  /* ./parser//parser.nit:9921 */
+  /* ./parser//parser.nit:9913 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9921);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9913);
   }
-  /* ./parser//parser.nit:9922 */
-  fra.me.REG[3] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9928 */
+  /* ./parser//parser.nit:9914 */
+  fra.me.REG[3] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:9920 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9929 */
+  /* ./parser//parser.nit:9921 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction304____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9929);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9921);
   }
   REGB0 = ATTR_parser___ReduceAction304____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33113,7 +33100,7 @@ void parser___ReduceAction304___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos295]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9932;
+  fra.me.line = 9924;
   fra.me.meth = LOCATE_parser___ReduceAction304___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -33121,7 +33108,7 @@ void parser___ReduceAction304___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9932 */
+  /* ./parser//parser.nit:9924 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction304____goto(fra.me.REG[1]) = REGB0;
@@ -33130,34 +33117,58 @@ void parser___ReduceAction304___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction305___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[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 = 9936;
+  fra.me.line = 9928;
   fra.me.meth = LOCATE_parser___ReduceAction305___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:9938 */
+  /* ./parser//parser.nit:9930 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9939 */
+  /* ./parser//parser.nit:9931 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9932 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9933 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9935 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9935);
+  }
+  /* ./parser//parser.nit:9937 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9937);
+  }
+  /* ./parser//parser.nit:9939 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9939);
+  }
   /* ./parser//parser.nit:9940 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9942 */
+  fra.me.REG[3] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:9946 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9943 */
+  /* ./parser//parser.nit:9947 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction305____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9943);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9947);
   }
   REGB0 = ATTR_parser___ReduceAction305____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33173,7 +33184,7 @@ void parser___ReduceAction305___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos296]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9946;
+  fra.me.line = 9950;
   fra.me.meth = LOCATE_parser___ReduceAction305___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -33181,7 +33192,7 @@ void parser___ReduceAction305___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9946 */
+  /* ./parser//parser.nit:9950 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction305____goto(fra.me.REG[1]) = REGB0;
@@ -33189,14 +33200,74 @@ void parser___ReduceAction305___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos296] = 1;
   return;
 }
-void parser___ReduceAction309___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 = 9954;
+  fra.me.meth = LOCATE_parser___ReduceAction306___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:9956 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9957 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9958 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9960 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9961 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction306____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9961);
+  }
+  REGB0 = ATTR_parser___ReduceAction306____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction306___init(val_t p0, val_t p1, int* init_table){
+  int itpos297 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction306].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos297]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 9964;
+  fra.me.meth = LOCATE_parser___ReduceAction306___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit:9964 */
+  fra.me.REG[1] = fra.me.REG[0];
+  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction306____goto(fra.me.REG[1]) = REGB0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos297] = 1;
+  return;
+}
+void parser___ReduceAction310___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9950;
-  fra.me.meth = LOCATE_parser___ReduceAction309___action;
+  fra.me.line = 9968;
+  fra.me.meth = LOCATE_parser___ReduceAction310___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -33209,90 +33280,90 @@ void parser___ReduceAction309___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:9952 */
+  /* ./parser//parser.nit:9970 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9953 */
+  /* ./parser//parser.nit:9971 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9954 */
+  /* ./parser//parser.nit:9972 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9955 */
+  /* ./parser//parser.nit:9973 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9956 */
+  /* ./parser//parser.nit:9974 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9957 */
+  /* ./parser//parser.nit:9975 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9959 */
+  /* ./parser//parser.nit:9977 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9959);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9977);
   }
-  /* ./parser//parser.nit:9961 */
+  /* ./parser//parser.nit:9979 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9961);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9979);
   }
-  /* ./parser//parser.nit:9962 */
+  /* ./parser//parser.nit:9980 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:9964 */
+  /* ./parser//parser.nit:9982 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9964);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9982);
   }
-  /* ./parser//parser.nit:9965 */
+  /* ./parser//parser.nit:9983 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
   fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:9966 */
+  /* ./parser//parser.nit:9984 */
   fra.me.REG[7] = NEW_ABraExpr_parser_prod___ABraExpr___init_abraexpr(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:9971 */
+  /* ./parser//parser.nit:9989 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:9972 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction309____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:9990 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction310____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9972);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9990);
   }
-  REGB0 = ATTR_parser___ReduceAction309____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction310____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction309___init(val_t p0, val_t p1, int* init_table){
-  int itpos297 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction309].i;
+void parser___ReduceAction310___init(val_t p0, val_t p1, int* init_table){
+  int itpos298 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction310].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos297]) return;
+  if (init_table[itpos298]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9975;
-  fra.me.meth = LOCATE_parser___ReduceAction309___init;
+  fra.me.line = 9993;
+  fra.me.meth = LOCATE_parser___ReduceAction310___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9975 */
+  /* ./parser//parser.nit:9993 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction309____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction310____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos297] = 1;
+  init_table[itpos298] = 1;
   return;
 }
-void parser___ReduceAction311___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[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9979;
-  fra.me.meth = LOCATE_parser___ReduceAction311___action;
+  fra.me.line = 9997;
+  fra.me.meth = LOCATE_parser___ReduceAction312___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -33306,181 +33377,102 @@ void parser___ReduceAction311___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9981 */
+  /* ./parser//parser.nit:9999 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9982 */
+  /* ./parser//parser.nit:10000 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9983 */
+  /* ./parser//parser.nit:10001 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9984 */
+  /* ./parser//parser.nit:10002 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9985 */
+  /* ./parser//parser.nit:10003 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9986 */
+  /* ./parser//parser.nit:10004 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9987 */
+  /* ./parser//parser.nit:10005 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9988 */
+  /* ./parser//parser.nit:10006 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9989 */
+  /* ./parser//parser.nit:10007 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9990 */
+  /* ./parser//parser.nit:10008 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9991 */
+  /* ./parser//parser.nit:10009 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9992 */
+  /* ./parser//parser.nit:10010 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9994 */
+  /* ./parser//parser.nit:10012 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9994);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10012);
   }
-  /* ./parser//parser.nit:9996 */
+  /* ./parser//parser.nit:10014 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9996);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10014);
   }
-  /* ./parser//parser.nit:9998 */
+  /* ./parser//parser.nit:10016 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwthen, ID_TKwthen)) /*cast nullable TKwthen*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9998);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10016);
   }
-  /* ./parser//parser.nit:10000 */
+  /* ./parser//parser.nit:10018 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10000);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10018);
   }
-  /* ./parser//parser.nit:10002 */
+  /* ./parser//parser.nit:10020 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwelse, ID_TKwelse)) /*cast nullable TKwelse*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10002);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10020);
   }
-  /* ./parser//parser.nit:10004 */
+  /* ./parser//parser.nit:10022 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10004);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10022);
   }
-  /* ./parser//parser.nit:10005 */
-  fra.me.REG[3] = NEW_AIfexprExpr_parser_prod___AIfexprExpr___init_aifexprexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10013 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10014 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction311____goto(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10014);
-  }
-  REGB0 = ATTR_parser___ReduceAction311____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction311___init(val_t p0, val_t p1, int* init_table){
-  int itpos298 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction311].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos298]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10017;
-  fra.me.meth = LOCATE_parser___ReduceAction311___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10017 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction311____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos298] = 1;
-  return;
-}
-void parser___ReduceAction313___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10021;
-  fra.me.meth = LOCATE_parser___ReduceAction313___action;
-  fra.me.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:10023 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10024 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10025 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10026 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10027 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10029 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10029);
-  }
+  fra.me.REG[3] = NEW_AIfexprExpr_parser_prod___AIfexprExpr___init_aifexprexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:10031 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10031);
-  }
-  /* ./parser//parser.nit:10032 */
-  fra.me.REG[3] = NEW_AOrExpr_parser_prod___AOrExpr___init_aorexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10036 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10037 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction313____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:10032 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction312____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10037);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10032);
   }
-  REGB0 = ATTR_parser___ReduceAction313____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction312____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction313___init(val_t p0, val_t p1, int* init_table){
-  int itpos299 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction313].i;
+void parser___ReduceAction312___init(val_t p0, val_t p1, int* init_table){
+  int itpos299 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction312].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos299]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10040;
-  fra.me.meth = LOCATE_parser___ReduceAction313___init;
+  fra.me.line = 10035;
+  fra.me.meth = LOCATE_parser___ReduceAction312___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10040 */
+  /* ./parser//parser.nit:10035 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction313____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction312____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos299] = 1;
   return;
@@ -33491,7 +33483,7 @@ void parser___ReduceAction314___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 = 10044;
+  fra.me.line = 10039;
   fra.me.meth = LOCATE_parser___ReduceAction314___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -33502,37 +33494,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:10046 */
+  /* ./parser//parser.nit:10041 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10047 */
+  /* ./parser//parser.nit:10042 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10048 */
+  /* ./parser//parser.nit:10043 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10049 */
+  /* ./parser//parser.nit:10044 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10050 */
+  /* ./parser//parser.nit:10045 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10052 */
+  /* ./parser//parser.nit:10047 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10052);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10047);
   }
-  /* ./parser//parser.nit:10054 */
+  /* ./parser//parser.nit:10049 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10054);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10049);
   }
-  /* ./parser//parser.nit:10055 */
-  fra.me.REG[3] = NEW_AAndExpr_parser_prod___AAndExpr___init_aandexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10059 */
+  /* ./parser//parser.nit:10050 */
+  fra.me.REG[3] = NEW_AOrExpr_parser_prod___AOrExpr___init_aorexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10054 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10060 */
+  /* ./parser//parser.nit:10055 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction314____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10060);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10055);
   }
   REGB0 = ATTR_parser___ReduceAction314____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33548,7 +33540,7 @@ void parser___ReduceAction314___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos300]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10063;
+  fra.me.line = 10058;
   fra.me.meth = LOCATE_parser___ReduceAction314___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -33556,7 +33548,7 @@ void parser___ReduceAction314___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10063 */
+  /* ./parser//parser.nit:10058 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction314____goto(fra.me.REG[1]) = REGB0;
@@ -33570,7 +33562,7 @@ void parser___ReduceAction315___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 = 10067;
+  fra.me.line = 10062;
   fra.me.meth = LOCATE_parser___ReduceAction315___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -33581,39 +33573,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:10069 */
+  /* ./parser//parser.nit:10064 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10070 */
+  /* ./parser//parser.nit:10065 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10071 */
+  /* ./parser//parser.nit:10066 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10072 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10073 */
+  /* ./parser//parser.nit:10067 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10074 */
+  /* ./parser//parser.nit:10068 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10076 */
+  /* ./parser//parser.nit:10070 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10076);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10070);
   }
-  /* ./parser//parser.nit:10078 */
+  /* ./parser//parser.nit:10072 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10078);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10072);
   }
-  /* ./parser//parser.nit:10079 */
-  fra.me.REG[3] = NEW_AOrElseExpr_parser_prod___AOrElseExpr___init_aorelseexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10083 */
+  /* ./parser//parser.nit:10073 */
+  fra.me.REG[3] = NEW_AAndExpr_parser_prod___AAndExpr___init_aandexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10077 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10084 */
+  /* ./parser//parser.nit:10078 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction315____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10084);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10078);
   }
   REGB0 = ATTR_parser___ReduceAction315____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33629,7 +33619,7 @@ void parser___ReduceAction315___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos301]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10087;
+  fra.me.line = 10081;
   fra.me.meth = LOCATE_parser___ReduceAction315___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -33637,7 +33627,7 @@ void parser___ReduceAction315___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10087 */
+  /* ./parser//parser.nit:10081 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction315____goto(fra.me.REG[1]) = REGB0;
@@ -33645,14 +33635,14 @@ void parser___ReduceAction315___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos301] = 1;
   return;
 }
-void parser___ReduceAction317___action(val_t p0, val_t p1){
+void parser___ReduceAction316___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10091;
-  fra.me.meth = LOCATE_parser___ReduceAction317___action;
+  fra.me.line = 10085;
+  fra.me.meth = LOCATE_parser___ReduceAction316___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -33662,74 +33652,78 @@ void parser___ReduceAction317___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10093 */
+  /* ./parser//parser.nit:10087 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10094 */
+  /* ./parser//parser.nit:10088 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10095 */
+  /* ./parser//parser.nit:10089 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10096 */
+  /* ./parser//parser.nit:10090 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10098 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
+  /* ./parser//parser.nit:10091 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10092 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10094 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10098);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10094);
   }
-  /* ./parser//parser.nit:10100 */
+  /* ./parser//parser.nit:10096 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10100);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10096);
   }
+  /* ./parser//parser.nit:10097 */
+  fra.me.REG[3] = NEW_AOrElseExpr_parser_prod___AOrElseExpr___init_aorelseexpr(fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:10101 */
-  fra.me.REG[3] = NEW_ANotExpr_parser_prod___ANotExpr___init_anotexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10105 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10106 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction317____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:10102 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction316____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10106);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10102);
   }
-  REGB0 = ATTR_parser___ReduceAction317____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction316____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction317___init(val_t p0, val_t p1, int* init_table){
-  int itpos302 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction317].i;
+void parser___ReduceAction316___init(val_t p0, val_t p1, int* init_table){
+  int itpos302 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction316].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos302]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10109;
-  fra.me.meth = LOCATE_parser___ReduceAction317___init;
+  fra.me.line = 10105;
+  fra.me.meth = LOCATE_parser___ReduceAction316___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10109 */
+  /* ./parser//parser.nit:10105 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction317____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction316____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos302] = 1;
   return;
 }
-void parser___ReduceAction319___action(val_t p0, val_t p1){
+void parser___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 = 10113;
-  fra.me.meth = LOCATE_parser___ReduceAction319___action;
+  fra.me.line = 10109;
+  fra.me.meth = LOCATE_parser___ReduceAction318___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -33739,64 +33733,62 @@ void parser___ReduceAction319___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10115 */
+  /* ./parser//parser.nit:10111 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10116 */
+  /* ./parser//parser.nit:10112 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10117 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10118 */
+  /* ./parser//parser.nit:10113 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10119 */
+  /* ./parser//parser.nit:10114 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10121 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:10116 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10121);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10116);
   }
-  /* ./parser//parser.nit:10123 */
+  /* ./parser//parser.nit:10118 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10123);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10118);
   }
-  /* ./parser//parser.nit:10124 */
-  fra.me.REG[3] = NEW_AEqExpr_parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10128 */
+  /* ./parser//parser.nit:10119 */
+  fra.me.REG[3] = NEW_ANotExpr_parser_prod___ANotExpr___init_anotexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10123 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10129 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction319____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:10124 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction318____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10129);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10124);
   }
-  REGB0 = ATTR_parser___ReduceAction319____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction318____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction319___init(val_t p0, val_t p1, int* init_table){
-  int itpos303 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction319].i;
+void parser___ReduceAction318___init(val_t p0, val_t p1, int* init_table){
+  int itpos303 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction318].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos303]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10132;
-  fra.me.meth = LOCATE_parser___ReduceAction319___init;
+  fra.me.line = 10127;
+  fra.me.meth = LOCATE_parser___ReduceAction318___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10132 */
+  /* ./parser//parser.nit:10127 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction319____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction318____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos303] = 1;
   return;
@@ -33807,7 +33799,7 @@ void parser___ReduceAction320___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 = 10136;
+  fra.me.line = 10131;
   fra.me.meth = LOCATE_parser___ReduceAction320___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -33818,37 +33810,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:10138 */
+  /* ./parser//parser.nit:10133 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10139 */
+  /* ./parser//parser.nit:10134 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10140 */
+  /* ./parser//parser.nit:10135 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10141 */
+  /* ./parser//parser.nit:10136 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10142 */
+  /* ./parser//parser.nit:10137 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10144 */
+  /* ./parser//parser.nit:10139 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10144);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10139);
   }
-  /* ./parser//parser.nit:10146 */
+  /* ./parser//parser.nit:10141 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10146);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10141);
   }
-  /* ./parser//parser.nit:10147 */
-  fra.me.REG[3] = NEW_AEeExpr_parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10151 */
+  /* ./parser//parser.nit:10142 */
+  fra.me.REG[3] = NEW_AEqExpr_parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10146 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10152 */
+  /* ./parser//parser.nit:10147 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction320____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10152);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10147);
   }
   REGB0 = ATTR_parser___ReduceAction320____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33864,7 +33856,7 @@ void parser___ReduceAction320___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos304]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10155;
+  fra.me.line = 10150;
   fra.me.meth = LOCATE_parser___ReduceAction320___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -33872,7 +33864,7 @@ void parser___ReduceAction320___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10155 */
+  /* ./parser//parser.nit:10150 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction320____goto(fra.me.REG[1]) = REGB0;
@@ -33886,7 +33878,7 @@ void parser___ReduceAction321___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 = 10159;
+  fra.me.line = 10154;
   fra.me.meth = LOCATE_parser___ReduceAction321___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -33897,37 +33889,37 @@ void parser___ReduceAction321___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10161 */
+  /* ./parser//parser.nit:10156 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10162 */
+  /* ./parser//parser.nit:10157 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10163 */
+  /* ./parser//parser.nit:10158 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10164 */
+  /* ./parser//parser.nit:10159 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10165 */
+  /* ./parser//parser.nit:10160 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10167 */
+  /* ./parser//parser.nit:10162 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10167);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10162);
   }
-  /* ./parser//parser.nit:10169 */
+  /* ./parser//parser.nit:10164 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10169);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10164);
   }
-  /* ./parser//parser.nit:10170 */
-  fra.me.REG[3] = NEW_ANeExpr_parser_prod___ANeExpr___init_aneexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10174 */
+  /* ./parser//parser.nit:10165 */
+  fra.me.REG[3] = NEW_AEeExpr_parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10169 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10175 */
+  /* ./parser//parser.nit:10170 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction321____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, 10170);
   }
   REGB0 = ATTR_parser___ReduceAction321____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33943,7 +33935,7 @@ void parser___ReduceAction321___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos305]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10178;
+  fra.me.line = 10173;
   fra.me.meth = LOCATE_parser___ReduceAction321___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -33951,7 +33943,7 @@ void parser___ReduceAction321___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10178 */
+  /* ./parser//parser.nit:10173 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction321____goto(fra.me.REG[1]) = REGB0;
@@ -33965,7 +33957,7 @@ void parser___ReduceAction322___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 = 10182;
+  fra.me.line = 10177;
   fra.me.meth = LOCATE_parser___ReduceAction322___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -33976,37 +33968,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:10184 */
+  /* ./parser//parser.nit:10179 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10185 */
+  /* ./parser//parser.nit:10180 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10186 */
+  /* ./parser//parser.nit:10181 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10187 */
+  /* ./parser//parser.nit:10182 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10188 */
+  /* ./parser//parser.nit:10183 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10190 */
+  /* ./parser//parser.nit:10185 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10190);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10185);
   }
-  /* ./parser//parser.nit:10192 */
+  /* ./parser//parser.nit:10187 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10192);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10187);
   }
-  /* ./parser//parser.nit:10193 */
-  fra.me.REG[3] = NEW_ALtExpr_parser_prod___ALtExpr___init_altexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10197 */
+  /* ./parser//parser.nit:10188 */
+  fra.me.REG[3] = NEW_ANeExpr_parser_prod___ANeExpr___init_aneexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10192 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10198 */
+  /* ./parser//parser.nit:10193 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction322____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, 10193);
   }
   REGB0 = ATTR_parser___ReduceAction322____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34022,7 +34014,7 @@ void parser___ReduceAction322___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos306]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10201;
+  fra.me.line = 10196;
   fra.me.meth = LOCATE_parser___ReduceAction322___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34030,7 +34022,7 @@ void parser___ReduceAction322___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10201 */
+  /* ./parser//parser.nit:10196 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction322____goto(fra.me.REG[1]) = REGB0;
@@ -34044,7 +34036,7 @@ void parser___ReduceAction323___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 = 10205;
+  fra.me.line = 10200;
   fra.me.meth = LOCATE_parser___ReduceAction323___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34055,37 +34047,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:10207 */
+  /* ./parser//parser.nit:10202 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10208 */
+  /* ./parser//parser.nit:10203 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10209 */
+  /* ./parser//parser.nit:10204 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10210 */
+  /* ./parser//parser.nit:10205 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10211 */
+  /* ./parser//parser.nit:10206 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10213 */
+  /* ./parser//parser.nit:10208 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10213);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10208);
   }
-  /* ./parser//parser.nit:10215 */
+  /* ./parser//parser.nit:10210 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10210);
   }
-  /* ./parser//parser.nit:10216 */
-  fra.me.REG[3] = NEW_ALeExpr_parser_prod___ALeExpr___init_aleexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10220 */
+  /* ./parser//parser.nit:10211 */
+  fra.me.REG[3] = NEW_ALtExpr_parser_prod___ALtExpr___init_altexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10215 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10221 */
+  /* ./parser//parser.nit:10216 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction323____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10221);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10216);
   }
   REGB0 = ATTR_parser___ReduceAction323____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34101,7 +34093,7 @@ void parser___ReduceAction323___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos307]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10224;
+  fra.me.line = 10219;
   fra.me.meth = LOCATE_parser___ReduceAction323___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34109,7 +34101,7 @@ void parser___ReduceAction323___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10224 */
+  /* ./parser//parser.nit:10219 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction323____goto(fra.me.REG[1]) = REGB0;
@@ -34123,7 +34115,7 @@ void parser___ReduceAction324___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 = 10228;
+  fra.me.line = 10223;
   fra.me.meth = LOCATE_parser___ReduceAction324___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34134,37 +34126,37 @@ void parser___ReduceAction324___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10230 */
+  /* ./parser//parser.nit:10225 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10231 */
+  /* ./parser//parser.nit:10226 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10232 */
+  /* ./parser//parser.nit:10227 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10233 */
+  /* ./parser//parser.nit:10228 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10234 */
+  /* ./parser//parser.nit:10229 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10236 */
+  /* ./parser//parser.nit:10231 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10236);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10231);
   }
-  /* ./parser//parser.nit:10238 */
+  /* ./parser//parser.nit:10233 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10238);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10233);
   }
-  /* ./parser//parser.nit:10239 */
-  fra.me.REG[3] = NEW_ALlExpr_parser_prod___ALlExpr___init_allexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10243 */
+  /* ./parser//parser.nit:10234 */
+  fra.me.REG[3] = NEW_ALeExpr_parser_prod___ALeExpr___init_aleexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10238 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10244 */
+  /* ./parser//parser.nit:10239 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction324____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10244);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10239);
   }
   REGB0 = ATTR_parser___ReduceAction324____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34180,7 +34172,7 @@ void parser___ReduceAction324___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos308]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10247;
+  fra.me.line = 10242;
   fra.me.meth = LOCATE_parser___ReduceAction324___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34188,7 +34180,7 @@ void parser___ReduceAction324___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10247 */
+  /* ./parser//parser.nit:10242 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction324____goto(fra.me.REG[1]) = REGB0;
@@ -34202,7 +34194,7 @@ void parser___ReduceAction325___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 = 10251;
+  fra.me.line = 10246;
   fra.me.meth = LOCATE_parser___ReduceAction325___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34213,37 +34205,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:10253 */
+  /* ./parser//parser.nit:10248 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10254 */
+  /* ./parser//parser.nit:10249 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10255 */
+  /* ./parser//parser.nit:10250 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10256 */
+  /* ./parser//parser.nit:10251 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10257 */
+  /* ./parser//parser.nit:10252 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10259 */
+  /* ./parser//parser.nit:10254 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10259);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10254);
   }
-  /* ./parser//parser.nit:10261 */
+  /* ./parser//parser.nit:10256 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10261);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10256);
   }
-  /* ./parser//parser.nit:10262 */
-  fra.me.REG[3] = NEW_AGtExpr_parser_prod___AGtExpr___init_agtexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10266 */
+  /* ./parser//parser.nit:10257 */
+  fra.me.REG[3] = NEW_ALlExpr_parser_prod___ALlExpr___init_allexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10261 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10267 */
+  /* ./parser//parser.nit:10262 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction325____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10267);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10262);
   }
   REGB0 = ATTR_parser___ReduceAction325____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34259,7 +34251,7 @@ void parser___ReduceAction325___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos309]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10270;
+  fra.me.line = 10265;
   fra.me.meth = LOCATE_parser___ReduceAction325___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34267,7 +34259,7 @@ void parser___ReduceAction325___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10270 */
+  /* ./parser//parser.nit:10265 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction325____goto(fra.me.REG[1]) = REGB0;
@@ -34281,7 +34273,7 @@ void parser___ReduceAction326___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 = 10274;
+  fra.me.line = 10269;
   fra.me.meth = LOCATE_parser___ReduceAction326___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34292,37 +34284,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:10276 */
+  /* ./parser//parser.nit:10271 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10277 */
+  /* ./parser//parser.nit:10272 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10278 */
+  /* ./parser//parser.nit:10273 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10279 */
+  /* ./parser//parser.nit:10274 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10280 */
+  /* ./parser//parser.nit:10275 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10282 */
+  /* ./parser//parser.nit:10277 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10282);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10277);
   }
-  /* ./parser//parser.nit:10284 */
+  /* ./parser//parser.nit:10279 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10284);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10279);
   }
-  /* ./parser//parser.nit:10285 */
-  fra.me.REG[3] = NEW_AGeExpr_parser_prod___AGeExpr___init_ageexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10289 */
+  /* ./parser//parser.nit:10280 */
+  fra.me.REG[3] = NEW_AGtExpr_parser_prod___AGtExpr___init_agtexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10284 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10290 */
+  /* ./parser//parser.nit:10285 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction326____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10290);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10285);
   }
   REGB0 = ATTR_parser___ReduceAction326____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34338,7 +34330,7 @@ void parser___ReduceAction326___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos310]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10293;
+  fra.me.line = 10288;
   fra.me.meth = LOCATE_parser___ReduceAction326___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34346,7 +34338,7 @@ void parser___ReduceAction326___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10293 */
+  /* ./parser//parser.nit:10288 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction326____goto(fra.me.REG[1]) = REGB0;
@@ -34360,7 +34352,7 @@ void parser___ReduceAction327___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 = 10297;
+  fra.me.line = 10292;
   fra.me.meth = LOCATE_parser___ReduceAction327___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34371,37 +34363,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:10299 */
+  /* ./parser//parser.nit:10294 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10300 */
+  /* ./parser//parser.nit:10295 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10301 */
+  /* ./parser//parser.nit:10296 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10302 */
+  /* ./parser//parser.nit:10297 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10303 */
+  /* ./parser//parser.nit:10298 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10305 */
+  /* ./parser//parser.nit:10300 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10305);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10300);
   }
-  /* ./parser//parser.nit:10307 */
+  /* ./parser//parser.nit:10302 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10307);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10302);
   }
-  /* ./parser//parser.nit:10308 */
-  fra.me.REG[3] = NEW_AGgExpr_parser_prod___AGgExpr___init_aggexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10312 */
+  /* ./parser//parser.nit:10303 */
+  fra.me.REG[3] = NEW_AGeExpr_parser_prod___AGeExpr___init_ageexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10307 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10313 */
+  /* ./parser//parser.nit:10308 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction327____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10313);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10308);
   }
   REGB0 = ATTR_parser___ReduceAction327____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34417,7 +34409,7 @@ void parser___ReduceAction327___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos311]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10316;
+  fra.me.line = 10311;
   fra.me.meth = LOCATE_parser___ReduceAction327___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34425,7 +34417,7 @@ void parser___ReduceAction327___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10316 */
+  /* ./parser//parser.nit:10311 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction327____goto(fra.me.REG[1]) = REGB0;
@@ -34439,7 +34431,7 @@ void parser___ReduceAction328___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 = 10320;
+  fra.me.line = 10315;
   fra.me.meth = LOCATE_parser___ReduceAction328___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34450,37 +34442,37 @@ void parser___ReduceAction328___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10322 */
+  /* ./parser//parser.nit:10317 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10323 */
+  /* ./parser//parser.nit:10318 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10324 */
+  /* ./parser//parser.nit:10319 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10325 */
+  /* ./parser//parser.nit:10320 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10326 */
+  /* ./parser//parser.nit:10321 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10328 */
+  /* ./parser//parser.nit:10323 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10328);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10323);
   }
-  /* ./parser//parser.nit:10330 */
+  /* ./parser//parser.nit:10325 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10330);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10325);
   }
-  /* ./parser//parser.nit:10331 */
-  fra.me.REG[3] = NEW_AStarshipExpr_parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10335 */
+  /* ./parser//parser.nit:10326 */
+  fra.me.REG[3] = NEW_AGgExpr_parser_prod___AGgExpr___init_aggexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10330 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10336 */
+  /* ./parser//parser.nit:10331 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction328____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10336);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10331);
   }
   REGB0 = ATTR_parser___ReduceAction328____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34496,7 +34488,7 @@ void parser___ReduceAction328___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos312]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10339;
+  fra.me.line = 10334;
   fra.me.meth = LOCATE_parser___ReduceAction328___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34504,7 +34496,7 @@ void parser___ReduceAction328___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10339 */
+  /* ./parser//parser.nit:10334 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction328____goto(fra.me.REG[1]) = REGB0;
@@ -34518,7 +34510,7 @@ void parser___ReduceAction329___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 = 10343;
+  fra.me.line = 10338;
   fra.me.meth = LOCATE_parser___ReduceAction329___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34529,37 +34521,37 @@ void parser___ReduceAction329___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10345 */
+  /* ./parser//parser.nit:10340 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10346 */
+  /* ./parser//parser.nit:10341 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10347 */
+  /* ./parser//parser.nit:10342 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10348 */
+  /* ./parser//parser.nit:10343 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10349 */
+  /* ./parser//parser.nit:10344 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10351 */
+  /* ./parser//parser.nit:10346 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10351);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10346);
   }
-  /* ./parser//parser.nit:10353 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:10348 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10353);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10348);
   }
-  /* ./parser//parser.nit:10354 */
-  fra.me.REG[3] = NEW_AIsaExpr_parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10358 */
+  /* ./parser//parser.nit:10349 */
+  fra.me.REG[3] = NEW_AStarshipExpr_parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10353 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10359 */
+  /* ./parser//parser.nit:10354 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction329____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, 10354);
   }
   REGB0 = ATTR_parser___ReduceAction329____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34575,7 +34567,7 @@ void parser___ReduceAction329___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos313]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10362;
+  fra.me.line = 10357;
   fra.me.meth = LOCATE_parser___ReduceAction329___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34583,7 +34575,7 @@ void parser___ReduceAction329___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10362 */
+  /* ./parser//parser.nit:10357 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction329____goto(fra.me.REG[1]) = REGB0;
@@ -34591,14 +34583,14 @@ void parser___ReduceAction329___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos313] = 1;
   return;
 }
-void parser___ReduceAction331___action(val_t p0, val_t p1){
+void parser___ReduceAction330___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10366;
-  fra.me.meth = LOCATE_parser___ReduceAction331___action;
+  fra.me.line = 10361;
+  fra.me.meth = LOCATE_parser___ReduceAction330___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -34608,64 +34600,64 @@ void parser___ReduceAction331___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10368 */
+  /* ./parser//parser.nit:10363 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10369 */
+  /* ./parser//parser.nit:10364 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10370 */
+  /* ./parser//parser.nit:10365 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10371 */
+  /* ./parser//parser.nit:10366 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10372 */
+  /* ./parser//parser.nit:10367 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10374 */
+  /* ./parser//parser.nit:10369 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10374);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10369);
   }
-  /* ./parser//parser.nit:10376 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:10371 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10376);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10371);
   }
-  /* ./parser//parser.nit:10377 */
-  fra.me.REG[3] = NEW_APlusExpr_parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10381 */
+  /* ./parser//parser.nit:10372 */
+  fra.me.REG[3] = NEW_AIsaExpr_parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10376 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10382 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction331____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:10377 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction330____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10382);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10377);
   }
-  REGB0 = ATTR_parser___ReduceAction331____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction330____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction331___init(val_t p0, val_t p1, int* init_table){
-  int itpos314 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction331].i;
+void parser___ReduceAction330___init(val_t p0, val_t p1, int* init_table){
+  int itpos314 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction330].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos314]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10385;
-  fra.me.meth = LOCATE_parser___ReduceAction331___init;
+  fra.me.line = 10380;
+  fra.me.meth = LOCATE_parser___ReduceAction330___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10385 */
+  /* ./parser//parser.nit:10380 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction331____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction330____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos314] = 1;
   return;
@@ -34676,7 +34668,7 @@ void parser___ReduceAction332___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 = 10389;
+  fra.me.line = 10384;
   fra.me.meth = LOCATE_parser___ReduceAction332___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34687,37 +34679,37 @@ void parser___ReduceAction332___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10391 */
+  /* ./parser//parser.nit:10386 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10392 */
+  /* ./parser//parser.nit:10387 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10393 */
+  /* ./parser//parser.nit:10388 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10394 */
+  /* ./parser//parser.nit:10389 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10395 */
+  /* ./parser//parser.nit:10390 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10397 */
+  /* ./parser//parser.nit:10392 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10397);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10392);
   }
-  /* ./parser//parser.nit:10399 */
+  /* ./parser//parser.nit:10394 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10399);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10394);
   }
-  /* ./parser//parser.nit:10400 */
-  fra.me.REG[3] = NEW_AMinusExpr_parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10404 */
+  /* ./parser//parser.nit:10395 */
+  fra.me.REG[3] = NEW_APlusExpr_parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10399 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10405 */
+  /* ./parser//parser.nit:10400 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction332____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10405);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10400);
   }
   REGB0 = ATTR_parser___ReduceAction332____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34733,7 +34725,7 @@ void parser___ReduceAction332___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos315]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10408;
+  fra.me.line = 10403;
   fra.me.meth = LOCATE_parser___ReduceAction332___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34741,7 +34733,7 @@ void parser___ReduceAction332___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10408 */
+  /* ./parser//parser.nit:10403 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction332____goto(fra.me.REG[1]) = REGB0;
@@ -34749,14 +34741,14 @@ void parser___ReduceAction332___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos315] = 1;
   return;
 }
-void parser___ReduceAction334___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[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10412;
-  fra.me.meth = LOCATE_parser___ReduceAction334___action;
+  fra.me.line = 10407;
+  fra.me.meth = LOCATE_parser___ReduceAction333___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -34766,64 +34758,64 @@ void parser___ReduceAction334___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10414 */
+  /* ./parser//parser.nit:10409 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10415 */
+  /* ./parser//parser.nit:10410 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10416 */
+  /* ./parser//parser.nit:10411 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10417 */
+  /* ./parser//parser.nit:10412 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10418 */
+  /* ./parser//parser.nit:10413 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10420 */
+  /* ./parser//parser.nit:10415 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10420);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10415);
   }
-  /* ./parser//parser.nit:10422 */
+  /* ./parser//parser.nit:10417 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10422);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10417);
   }
-  /* ./parser//parser.nit:10423 */
-  fra.me.REG[3] = NEW_AStarExpr_parser_prod___AStarExpr___init_astarexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10427 */
+  /* ./parser//parser.nit:10418 */
+  fra.me.REG[3] = NEW_AMinusExpr_parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10422 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10428 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction334____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:10423 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction333____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, 10423);
   }
-  REGB0 = ATTR_parser___ReduceAction334____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction333____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction334___init(val_t p0, val_t p1, int* init_table){
-  int itpos316 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction334].i;
+void parser___ReduceAction333___init(val_t p0, val_t p1, int* init_table){
+  int itpos316 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction333].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos316]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10431;
-  fra.me.meth = LOCATE_parser___ReduceAction334___init;
+  fra.me.line = 10426;
+  fra.me.meth = LOCATE_parser___ReduceAction333___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10431 */
+  /* ./parser//parser.nit:10426 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction334____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction333____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos316] = 1;
   return;
@@ -34834,7 +34826,7 @@ void parser___ReduceAction335___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 = 10435;
+  fra.me.line = 10430;
   fra.me.meth = LOCATE_parser___ReduceAction335___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34845,37 +34837,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:10437 */
+  /* ./parser//parser.nit:10432 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10438 */
+  /* ./parser//parser.nit:10433 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10439 */
+  /* ./parser//parser.nit:10434 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10440 */
+  /* ./parser//parser.nit:10435 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10441 */
+  /* ./parser//parser.nit:10436 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10443 */
+  /* ./parser//parser.nit:10438 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10443);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10438);
   }
-  /* ./parser//parser.nit:10445 */
+  /* ./parser//parser.nit:10440 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10445);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10440);
   }
-  /* ./parser//parser.nit:10446 */
-  fra.me.REG[3] = NEW_ASlashExpr_parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10450 */
+  /* ./parser//parser.nit:10441 */
+  fra.me.REG[3] = NEW_AStarExpr_parser_prod___AStarExpr___init_astarexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10445 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10451 */
+  /* ./parser//parser.nit:10446 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction335____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10451);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10446);
   }
   REGB0 = ATTR_parser___ReduceAction335____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34891,7 +34883,7 @@ void parser___ReduceAction335___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos317]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10454;
+  fra.me.line = 10449;
   fra.me.meth = LOCATE_parser___ReduceAction335___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34899,7 +34891,7 @@ void parser___ReduceAction335___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10454 */
+  /* ./parser//parser.nit:10449 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction335____goto(fra.me.REG[1]) = REGB0;
@@ -34913,7 +34905,7 @@ void parser___ReduceAction336___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 = 10458;
+  fra.me.line = 10453;
   fra.me.meth = LOCATE_parser___ReduceAction336___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34924,37 +34916,37 @@ void parser___ReduceAction336___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10460 */
+  /* ./parser//parser.nit:10455 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10461 */
+  /* ./parser//parser.nit:10456 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10462 */
+  /* ./parser//parser.nit:10457 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10463 */
+  /* ./parser//parser.nit:10458 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10464 */
+  /* ./parser//parser.nit:10459 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10466 */
+  /* ./parser//parser.nit:10461 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10466);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10461);
   }
-  /* ./parser//parser.nit:10468 */
+  /* ./parser//parser.nit:10463 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10468);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10463);
   }
-  /* ./parser//parser.nit:10469 */
-  fra.me.REG[3] = NEW_APercentExpr_parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10473 */
+  /* ./parser//parser.nit:10464 */
+  fra.me.REG[3] = NEW_ASlashExpr_parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10468 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10474 */
+  /* ./parser//parser.nit:10469 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction336____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10474);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10469);
   }
   REGB0 = ATTR_parser___ReduceAction336____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34970,7 +34962,7 @@ void parser___ReduceAction336___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos318]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10477;
+  fra.me.line = 10472;
   fra.me.meth = LOCATE_parser___ReduceAction336___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34978,7 +34970,7 @@ void parser___ReduceAction336___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10477 */
+  /* ./parser//parser.nit:10472 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction336____goto(fra.me.REG[1]) = REGB0;
@@ -34986,14 +34978,14 @@ void parser___ReduceAction336___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos318] = 1;
   return;
 }
-void parser___ReduceAction338___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 = 10481;
-  fra.me.meth = LOCATE_parser___ReduceAction338___action;
+  fra.me.line = 10476;
+  fra.me.meth = LOCATE_parser___ReduceAction337___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -35003,62 +34995,64 @@ void parser___ReduceAction338___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10483 */
+  /* ./parser//parser.nit:10478 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10484 */
+  /* ./parser//parser.nit:10479 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10485 */
+  /* ./parser//parser.nit:10480 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10486 */
+  /* ./parser//parser.nit:10481 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10488 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TMinus, ID_TMinus)) /*cast nullable TMinus*/;
+  /* ./parser//parser.nit:10482 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10484 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10488);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10484);
   }
-  /* ./parser//parser.nit:10490 */
+  /* ./parser//parser.nit:10486 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10490);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10486);
   }
+  /* ./parser//parser.nit:10487 */
+  fra.me.REG[3] = NEW_APercentExpr_parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:10491 */
-  fra.me.REG[3] = NEW_AUminusExpr_parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10495 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10496 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction338____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:10492 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction337____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10496);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10492);
   }
-  REGB0 = ATTR_parser___ReduceAction338____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction337____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction338___init(val_t p0, val_t p1, int* init_table){
-  int itpos319 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction338].i;
+void parser___ReduceAction337___init(val_t p0, val_t p1, int* init_table){
+  int itpos319 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction337].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos319]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10499;
-  fra.me.meth = LOCATE_parser___ReduceAction338___init;
+  fra.me.line = 10495;
+  fra.me.meth = LOCATE_parser___ReduceAction337___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10499 */
+  /* ./parser//parser.nit:10495 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction338____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction337____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos319] = 1;
   return;
@@ -35069,7 +35063,7 @@ void parser___ReduceAction339___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 = 10503;
+  fra.me.line = 10499;
   fra.me.meth = LOCATE_parser___ReduceAction339___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -35080,35 +35074,35 @@ void parser___ReduceAction339___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10505 */
+  /* ./parser//parser.nit:10501 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10506 */
+  /* ./parser//parser.nit:10502 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10507 */
+  /* ./parser//parser.nit:10503 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10508 */
+  /* ./parser//parser.nit:10504 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10510 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwonce, ID_TKwonce)) /*cast nullable TKwonce*/;
+  /* ./parser//parser.nit:10506 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TMinus, ID_TMinus)) /*cast nullable TMinus*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10510);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10506);
   }
-  /* ./parser//parser.nit:10512 */
+  /* ./parser//parser.nit:10508 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10512);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10508);
   }
+  /* ./parser//parser.nit:10509 */
+  fra.me.REG[3] = NEW_AUminusExpr_parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:10513 */
-  fra.me.REG[3] = NEW_AOnceExpr_parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10517 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10518 */
+  /* ./parser//parser.nit:10514 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction339____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10518);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10514);
   }
   REGB0 = ATTR_parser___ReduceAction339____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35124,7 +35118,7 @@ void parser___ReduceAction339___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos320]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10521;
+  fra.me.line = 10517;
   fra.me.meth = LOCATE_parser___ReduceAction339___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35132,7 +35126,7 @@ void parser___ReduceAction339___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10521 */
+  /* ./parser//parser.nit:10517 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction339____goto(fra.me.REG[1]) = REGB0;
@@ -35140,155 +35134,144 @@ void parser___ReduceAction339___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos320] = 1;
   return;
 }
-void parser___ReduceAction341___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction340___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10525;
-  fra.me.meth = LOCATE_parser___ReduceAction341___action;
+  fra.me.line = 10521;
+  fra.me.meth = LOCATE_parser___ReduceAction340___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:10527 */
+  /* ./parser//parser.nit:10523 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10528 */
+  /* ./parser//parser.nit:10524 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10529 */
+  /* ./parser//parser.nit:10525 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10530 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10531 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10532 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10534 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwnew, ID_TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10534);
-  }
-  /* ./parser//parser.nit:10536 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:10526 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10528 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwonce, ID_TKwonce)) /*cast nullable TKwonce*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10536);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10528);
   }
-  /* ./parser//parser.nit:10538 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:10530 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10538);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10530);
   }
-  /* ./parser//parser.nit:10539 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:10540 */
-  fra.me.REG[6] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[6]);
-  /* ./parser//parser.nit:10546 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:10547 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction341____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:10531 */
+  fra.me.REG[3] = NEW_AOnceExpr_parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10535 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10536 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction340____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10547);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10536);
   }
-  REGB0 = ATTR_parser___ReduceAction341____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction340____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction341___init(val_t p0, val_t p1, int* init_table){
-  int itpos321 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction341].i;
+void parser___ReduceAction340___init(val_t p0, val_t p1, int* init_table){
+  int itpos321 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction340].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos321]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10550;
-  fra.me.meth = LOCATE_parser___ReduceAction341___init;
+  fra.me.line = 10539;
+  fra.me.meth = LOCATE_parser___ReduceAction340___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10550 */
+  /* ./parser//parser.nit:10539 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction341____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction340____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos321] = 1;
   return;
 }
 void parser___ReduceAction342___action(val_t p0, val_t p1){
-  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 = 10554;
+  fra.me.line = 10543;
   fra.me.meth = LOCATE_parser___ReduceAction342___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:10556 */
+  /* ./parser//parser.nit:10545 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10557 */
+  /* ./parser//parser.nit:10546 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10558 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10559 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10560 */
+  /* ./parser//parser.nit:10547 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10561 */
+  /* ./parser//parser.nit:10548 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10563 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
+  /* ./parser//parser.nit:10549 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10550 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10552 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwnew, ID_TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10563);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10552);
   }
-  /* ./parser//parser.nit:10565 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:10554 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10565);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10554);
   }
-  /* ./parser//parser.nit:10567 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:10556 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10567);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10556);
   }
-  /* ./parser//parser.nit:10568 */
-  fra.me.REG[3] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10573 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10574 */
+  /* ./parser//parser.nit:10557 */
+  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:10558 */
+  fra.me.REG[6] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[6]);
+  /* ./parser//parser.nit:10564 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:10565 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction342____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10574);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10565);
   }
   REGB0 = ATTR_parser___ReduceAction342____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35304,7 +35287,7 @@ void parser___ReduceAction342___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos322]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10577;
+  fra.me.line = 10568;
   fra.me.meth = LOCATE_parser___ReduceAction342___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35312,7 +35295,7 @@ void parser___ReduceAction342___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10577 */
+  /* ./parser//parser.nit:10568 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction342____goto(fra.me.REG[1]) = REGB0;
@@ -35326,7 +35309,7 @@ void parser___ReduceAction343___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 = 10581;
+  fra.me.line = 10572;
   fra.me.meth = LOCATE_parser___ReduceAction343___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -35338,35 +35321,45 @@ void parser___ReduceAction343___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10583 */
+  /* ./parser//parser.nit:10574 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10584 */
+  /* ./parser//parser.nit:10575 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10585 */
+  /* ./parser//parser.nit:10576 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10587 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
+  /* ./parser//parser.nit:10577 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10578 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10579 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10581 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10587);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10581);
   }
-  /* ./parser//parser.nit:10588 */
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:10591 */
+  /* ./parser//parser.nit:10583 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10583);
+  }
+  /* ./parser//parser.nit:10585 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10591);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10585);
   }
-  /* ./parser//parser.nit:10592 */
-  fra.me.REG[3] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:10597 */
+  /* ./parser//parser.nit:10586 */
+  fra.me.REG[3] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10591 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10598 */
+  /* ./parser//parser.nit:10592 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction343____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10598);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10592);
   }
   REGB0 = ATTR_parser___ReduceAction343____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35382,7 +35375,7 @@ void parser___ReduceAction343___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos323]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10601;
+  fra.me.line = 10595;
   fra.me.meth = LOCATE_parser___ReduceAction343___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35390,7 +35383,7 @@ void parser___ReduceAction343___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10601 */
+  /* ./parser//parser.nit:10595 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction343____goto(fra.me.REG[1]) = REGB0;
@@ -35399,53 +35392,52 @@ void parser___ReduceAction343___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction344___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[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 = 10605;
+  fra.me.line = 10599;
   fra.me.meth = LOCATE_parser___ReduceAction344___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:10607 */
+  /* ./parser//parser.nit:10601 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10608 */
+  /* ./parser//parser.nit:10602 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10609 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10610 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10611 */
+  /* ./parser//parser.nit:10603 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10613 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:10605 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10613);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10605);
   }
-  /* ./parser//parser.nit:10615 */
+  /* ./parser//parser.nit:10606 */
+  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:10609 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10615);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10609);
   }
-  /* ./parser//parser.nit:10616 */
-  fra.me.REG[3] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10620 */
+  /* ./parser//parser.nit:10610 */
+  fra.me.REG[3] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
+  /* ./parser//parser.nit:10615 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10621 */
+  /* ./parser//parser.nit:10616 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction344____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10621);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10616);
   }
   REGB0 = ATTR_parser___ReduceAction344____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35461,7 +35453,7 @@ void parser___ReduceAction344___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos324]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10624;
+  fra.me.line = 10619;
   fra.me.meth = LOCATE_parser___ReduceAction344___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35469,7 +35461,7 @@ void parser___ReduceAction344___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10624 */
+  /* ./parser//parser.nit:10619 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction344____goto(fra.me.REG[1]) = REGB0;
@@ -35483,7 +35475,7 @@ void parser___ReduceAction345___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 = 10628;
+  fra.me.line = 10623;
   fra.me.meth = LOCATE_parser___ReduceAction345___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -35494,27 +35486,37 @@ void parser___ReduceAction345___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10630 */
+  /* ./parser//parser.nit:10625 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10631 */
+  /* ./parser//parser.nit:10626 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10632 */
-  fra.me.REG[4] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:10635 */
+  /* ./parser//parser.nit:10627 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10628 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10629 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10631 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10631);
+  }
+  /* ./parser//parser.nit:10633 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10635);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10633);
   }
-  /* ./parser//parser.nit:10636 */
+  /* ./parser//parser.nit:10634 */
   fra.me.REG[3] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10640 */
+  /* ./parser//parser.nit:10638 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10641 */
+  /* ./parser//parser.nit:10639 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction345____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10641);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10639);
   }
   REGB0 = ATTR_parser___ReduceAction345____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35530,7 +35532,7 @@ void parser___ReduceAction345___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos325]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10644;
+  fra.me.line = 10642;
   fra.me.meth = LOCATE_parser___ReduceAction345___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35538,7 +35540,7 @@ void parser___ReduceAction345___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10644 */
+  /* ./parser//parser.nit:10642 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction345____goto(fra.me.REG[1]) = REGB0;
@@ -35546,100 +35548,85 @@ void parser___ReduceAction345___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos325] = 1;
   return;
 }
-void parser___ReduceAction352___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___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 = 10648;
-  fra.me.meth = LOCATE_parser___ReduceAction352___action;
+  fra.me.line = 10646;
+  fra.me.meth = LOCATE_parser___ReduceAction346___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:10650 */
+  /* ./parser//parser.nit:10648 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10651 */
+  /* ./parser//parser.nit:10649 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10652 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10650 */
+  fra.me.REG[4] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
   /* ./parser//parser.nit:10653 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10654 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10656 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10656);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10653);
   }
+  /* ./parser//parser.nit:10654 */
+  fra.me.REG[3] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:10658 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10658);
-  }
+  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:10659 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:10660 */
-  fra.me.REG[6] = NEW_ABraExpr_parser_prod___ABraExpr___init_abraexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:10665 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:10666 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction352____goto(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction346____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10666);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10659);
   }
-  REGB0 = ATTR_parser___ReduceAction352____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction346____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction352___init(val_t p0, val_t p1, int* init_table){
-  int itpos326 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction352].i;
+void parser___ReduceAction346___init(val_t p0, val_t p1, int* init_table){
+  int itpos326 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction346].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos326]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10669;
-  fra.me.meth = LOCATE_parser___ReduceAction352___init;
+  fra.me.line = 10662;
+  fra.me.meth = LOCATE_parser___ReduceAction346___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10669 */
+  /* ./parser//parser.nit:10662 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction352____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction346____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos326] = 1;
   return;
 }
 void parser___ReduceAction353___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10673;
+  fra.me.line = 10666;
   fra.me.meth = LOCATE_parser___ReduceAction353___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;
@@ -35647,63 +35634,42 @@ void parser___ReduceAction353___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10675 */
+  /* ./parser//parser.nit:10668 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10676 */
+  /* ./parser//parser.nit:10669 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10677 */
+  /* ./parser//parser.nit:10670 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10678 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10679 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10680 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10681 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10682 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10683 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10685 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwnew, ID_TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10685);
-  }
-  /* ./parser//parser.nit:10687 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10687);
-  }
-  /* ./parser//parser.nit:10689 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:10671 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10672 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10674 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10689);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10674);
   }
-  /* ./parser//parser.nit:10691 */
+  /* ./parser//parser.nit:10676 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10691);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10676);
   }
-  /* ./parser//parser.nit:10692 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
-  fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:10693 */
-  fra.me.REG[7] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[7]);
-  /* ./parser//parser.nit:10699 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:10700 */
+  /* ./parser//parser.nit:10677 */
+  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:10678 */
+  fra.me.REG[6] = NEW_ABraExpr_parser_prod___ABraExpr___init_abraexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
+  /* ./parser//parser.nit:10683 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:10684 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction353____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10700);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10684);
   }
   REGB0 = ATTR_parser___ReduceAction353____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35719,7 +35685,7 @@ void parser___ReduceAction353___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos327]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10703;
+  fra.me.line = 10687;
   fra.me.meth = LOCATE_parser___ReduceAction353___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35727,7 +35693,7 @@ void parser___ReduceAction353___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10703 */
+  /* ./parser//parser.nit:10687 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction353____goto(fra.me.REG[1]) = REGB0;
@@ -35736,64 +35702,79 @@ void parser___ReduceAction353___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction354___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[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10707;
+  fra.me.line = 10691;
   fra.me.meth = LOCATE_parser___ReduceAction354___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:10709 */
+  /* ./parser//parser.nit:10693 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10710 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10711 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10712 */
+  /* ./parser//parser.nit:10694 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10713 */
+  /* ./parser//parser.nit:10695 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10714 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10715 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10716 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10717 */
+  /* ./parser//parser.nit:10696 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10718 */
+  /* ./parser//parser.nit:10697 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10720 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:10698 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10699 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10700 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10701 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10703 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwnew, ID_TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10720);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10703);
   }
-  /* ./parser//parser.nit:10722 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:10705 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10722);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10705);
   }
-  /* ./parser//parser.nit:10723 */
-  fra.me.REG[3] = NEW_ACrangeExpr_parser_prod___ACrangeExpr___init_acrangeexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10727 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10728 */
+  /* ./parser//parser.nit:10707 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10707);
+  }
+  /* ./parser//parser.nit:10709 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10709);
+  }
+  /* ./parser//parser.nit:10710 */
+  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:10711 */
+  fra.me.REG[7] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[7]);
+  /* ./parser//parser.nit:10717 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:10718 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction354____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10728);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10718);
   }
   REGB0 = ATTR_parser___ReduceAction354____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35809,7 +35790,7 @@ void parser___ReduceAction354___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos328]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10731;
+  fra.me.line = 10721;
   fra.me.meth = LOCATE_parser___ReduceAction354___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35817,7 +35798,7 @@ void parser___ReduceAction354___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10731 */
+  /* ./parser//parser.nit:10721 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction354____goto(fra.me.REG[1]) = REGB0;
@@ -35831,7 +35812,7 @@ void parser___ReduceAction355___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 = 10735;
+  fra.me.line = 10725;
   fra.me.meth = LOCATE_parser___ReduceAction355___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -35843,47 +35824,47 @@ void parser___ReduceAction355___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:10737 */
+  /* ./parser//parser.nit:10727 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10738 */
+  /* ./parser//parser.nit:10728 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10739 */
+  /* ./parser//parser.nit:10729 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10740 */
+  /* ./parser//parser.nit:10730 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10741 */
+  /* ./parser//parser.nit:10731 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10742 */
+  /* ./parser//parser.nit:10732 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10743 */
+  /* ./parser//parser.nit:10733 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10744 */
+  /* ./parser//parser.nit:10734 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10745 */
+  /* ./parser//parser.nit:10735 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10746 */
+  /* ./parser//parser.nit:10736 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10748 */
+  /* ./parser//parser.nit:10738 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10748);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10738);
   }
-  /* ./parser//parser.nit:10750 */
+  /* ./parser//parser.nit:10740 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10750);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10740);
   }
-  /* ./parser//parser.nit:10751 */
-  fra.me.REG[3] = NEW_AOrangeExpr_parser_prod___AOrangeExpr___init_aorangeexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10755 */
+  /* ./parser//parser.nit:10741 */
+  fra.me.REG[3] = NEW_ACrangeExpr_parser_prod___ACrangeExpr___init_acrangeexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10745 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10756 */
+  /* ./parser//parser.nit:10746 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction355____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10756);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10746);
   }
   REGB0 = ATTR_parser___ReduceAction355____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35899,7 +35880,7 @@ void parser___ReduceAction355___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos329]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10759;
+  fra.me.line = 10749;
   fra.me.meth = LOCATE_parser___ReduceAction355___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35907,7 +35888,7 @@ void parser___ReduceAction355___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10759 */
+  /* ./parser//parser.nit:10749 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction355____goto(fra.me.REG[1]) = REGB0;
@@ -35916,46 +35897,64 @@ void parser___ReduceAction355___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction356___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[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 = 10763;
+  fra.me.line = 10753;
   fra.me.meth = LOCATE_parser___ReduceAction356___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:10765 */
+  /* ./parser//parser.nit:10755 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10766 */
+  /* ./parser//parser.nit:10756 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10767 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10769 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:10757 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10758 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10759 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10760 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10761 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10762 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10763 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10764 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10766 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10769);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10766);
   }
-  /* ./parser//parser.nit:10770 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:10771 */
-  fra.me.REG[4] = NEW_AArrayExpr_parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[4]);
+  /* ./parser//parser.nit:10768 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10768);
+  }
+  /* ./parser//parser.nit:10769 */
+  fra.me.REG[3] = NEW_AOrangeExpr_parser_prod___AOrangeExpr___init_aorangeexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10773 */
+  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:10774 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10775 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction356____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10775);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10774);
   }
   REGB0 = ATTR_parser___ReduceAction356____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35971,7 +35970,7 @@ void parser___ReduceAction356___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos330]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10778;
+  fra.me.line = 10777;
   fra.me.meth = LOCATE_parser___ReduceAction356___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35979,7 +35978,7 @@ void parser___ReduceAction356___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10778 */
+  /* ./parser//parser.nit:10777 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction356____goto(fra.me.REG[1]) = REGB0;
@@ -35988,40 +35987,46 @@ void parser___ReduceAction356___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction357___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[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 = 10782;
+  fra.me.line = 10781;
   fra.me.meth = LOCATE_parser___ReduceAction357___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10784 */
+  /* ./parser//parser.nit:10783 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10785 */
+  /* ./parser//parser.nit:10784 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10785 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:10787 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwself, ID_TKwself)) /*cast nullable TKwself*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Assert failed", NULL, LOCATE_parser, 10787);
   }
   /* ./parser//parser.nit:10788 */
-  fra.me.REG[3] = NEW_ASelfExpr_parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10791 */
-  fra.me.REG[2] = fra.me.REG[3];
+  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:10789 */
+  fra.me.REG[4] = NEW_AArrayExpr_parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[4]);
   /* ./parser//parser.nit:10792 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:10793 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction357____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10792);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10793);
   }
   REGB0 = ATTR_parser___ReduceAction357____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36037,7 +36042,7 @@ void parser___ReduceAction357___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos331]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10795;
+  fra.me.line = 10796;
   fra.me.meth = LOCATE_parser___ReduceAction357___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36045,7 +36050,7 @@ void parser___ReduceAction357___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10795 */
+  /* ./parser//parser.nit:10796 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction357____goto(fra.me.REG[1]) = REGB0;
@@ -36059,7 +36064,7 @@ void parser___ReduceAction358___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 = 10799;
+  fra.me.line = 10800;
   fra.me.meth = LOCATE_parser___ReduceAction358___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36069,25 +36074,25 @@ void parser___ReduceAction358___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:10801 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:10802 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10803 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10804 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwtrue, ID_TKwtrue)) /*cast nullable TKwtrue*/;
+  /* ./parser//parser.nit:10805 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwself, ID_TKwself)) /*cast nullable TKwself*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10804);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10805);
   }
-  /* ./parser//parser.nit:10805 */
-  fra.me.REG[3] = NEW_ATrueExpr_parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10808 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10806 */
+  fra.me.REG[3] = NEW_ASelfExpr_parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[3]);
   /* ./parser//parser.nit:10809 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10810 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction358____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10809);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10810);
   }
   REGB0 = ATTR_parser___ReduceAction358____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36103,7 +36108,7 @@ void parser___ReduceAction358___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos332]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10812;
+  fra.me.line = 10813;
   fra.me.meth = LOCATE_parser___ReduceAction358___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36111,7 +36116,7 @@ void parser___ReduceAction358___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10812 */
+  /* ./parser//parser.nit:10813 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction358____goto(fra.me.REG[1]) = REGB0;
@@ -36125,7 +36130,7 @@ void parser___ReduceAction359___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 = 10816;
+  fra.me.line = 10817;
   fra.me.meth = LOCATE_parser___ReduceAction359___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36135,25 +36140,25 @@ void parser___ReduceAction359___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:10818 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:10819 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10820 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10821 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwfalse, ID_TKwfalse)) /*cast nullable TKwfalse*/;
+  /* ./parser//parser.nit:10822 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwtrue, ID_TKwtrue)) /*cast nullable TKwtrue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10821);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10822);
   }
-  /* ./parser//parser.nit:10822 */
-  fra.me.REG[3] = NEW_AFalseExpr_parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10825 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10823 */
+  fra.me.REG[3] = NEW_ATrueExpr_parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[3]);
   /* ./parser//parser.nit:10826 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10827 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction359____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10826);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10827);
   }
   REGB0 = ATTR_parser___ReduceAction359____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36169,7 +36174,7 @@ void parser___ReduceAction359___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos333]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10829;
+  fra.me.line = 10830;
   fra.me.meth = LOCATE_parser___ReduceAction359___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36177,7 +36182,7 @@ void parser___ReduceAction359___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10829 */
+  /* ./parser//parser.nit:10830 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction359____goto(fra.me.REG[1]) = REGB0;
@@ -36191,7 +36196,7 @@ void parser___ReduceAction360___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 = 10833;
+  fra.me.line = 10834;
   fra.me.meth = LOCATE_parser___ReduceAction360___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36201,25 +36206,25 @@ void parser___ReduceAction360___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:10835 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:10836 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10837 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10838 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
+  /* ./parser//parser.nit:10839 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwfalse, ID_TKwfalse)) /*cast nullable TKwfalse*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10838);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10839);
   }
-  /* ./parser//parser.nit:10839 */
-  fra.me.REG[3] = NEW_ANullExpr_parser_prod___ANullExpr___init_anullexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10842 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10840 */
+  fra.me.REG[3] = NEW_AFalseExpr_parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[3]);
   /* ./parser//parser.nit:10843 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10844 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction360____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10843);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10844);
   }
   REGB0 = ATTR_parser___ReduceAction360____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36235,7 +36240,7 @@ void parser___ReduceAction360___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos334]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10846;
+  fra.me.line = 10847;
   fra.me.meth = LOCATE_parser___ReduceAction360___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36243,7 +36248,7 @@ void parser___ReduceAction360___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10846 */
+  /* ./parser//parser.nit:10847 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction360____goto(fra.me.REG[1]) = REGB0;
@@ -36257,7 +36262,7 @@ void parser___ReduceAction361___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 = 10850;
+  fra.me.line = 10851;
   fra.me.meth = LOCATE_parser___ReduceAction361___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36267,25 +36272,25 @@ void parser___ReduceAction361___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:10852 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:10853 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10854 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10855 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TNumber, ID_TNumber)) /*cast nullable TNumber*/;
+  /* ./parser//parser.nit:10856 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10855);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10856);
   }
-  /* ./parser//parser.nit:10856 */
-  fra.me.REG[3] = NEW_AIntExpr_parser_prod___AIntExpr___init_aintexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10859 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10857 */
+  fra.me.REG[3] = NEW_ANullExpr_parser_prod___ANullExpr___init_anullexpr(fra.me.REG[3]);
   /* ./parser//parser.nit:10860 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10861 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction361____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10860);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10861);
   }
   REGB0 = ATTR_parser___ReduceAction361____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36301,7 +36306,7 @@ void parser___ReduceAction361___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos335]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10863;
+  fra.me.line = 10864;
   fra.me.meth = LOCATE_parser___ReduceAction361___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36309,7 +36314,7 @@ void parser___ReduceAction361___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10863 */
+  /* ./parser//parser.nit:10864 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction361____goto(fra.me.REG[1]) = REGB0;
@@ -36323,7 +36328,7 @@ void parser___ReduceAction362___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 = 10867;
+  fra.me.line = 10868;
   fra.me.meth = LOCATE_parser___ReduceAction362___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36333,25 +36338,25 @@ void parser___ReduceAction362___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:10869 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:10870 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10871 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10872 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TFloat, ID_TFloat)) /*cast nullable TFloat*/;
+  /* ./parser//parser.nit:10873 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TNumber, ID_TNumber)) /*cast nullable TNumber*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10872);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10873);
   }
-  /* ./parser//parser.nit:10873 */
-  fra.me.REG[3] = NEW_AFloatExpr_parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10876 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10874 */
+  fra.me.REG[3] = NEW_AIntExpr_parser_prod___AIntExpr___init_aintexpr(fra.me.REG[3]);
   /* ./parser//parser.nit:10877 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10878 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction362____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10877);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10878);
   }
   REGB0 = ATTR_parser___ReduceAction362____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36367,7 +36372,7 @@ void parser___ReduceAction362___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos336]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10880;
+  fra.me.line = 10881;
   fra.me.meth = LOCATE_parser___ReduceAction362___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36375,7 +36380,7 @@ void parser___ReduceAction362___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10880 */
+  /* ./parser//parser.nit:10881 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction362____goto(fra.me.REG[1]) = REGB0;
@@ -36389,7 +36394,7 @@ void parser___ReduceAction363___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 = 10884;
+  fra.me.line = 10885;
   fra.me.meth = LOCATE_parser___ReduceAction363___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36399,25 +36404,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:10886 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:10887 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10888 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10889 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TChar, ID_TChar)) /*cast nullable TChar*/;
+  /* ./parser//parser.nit:10890 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TFloat, ID_TFloat)) /*cast nullable TFloat*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10889);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10890);
   }
-  /* ./parser//parser.nit:10890 */
-  fra.me.REG[3] = NEW_ACharExpr_parser_prod___ACharExpr___init_acharexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10893 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10891 */
+  fra.me.REG[3] = NEW_AFloatExpr_parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[3]);
   /* ./parser//parser.nit:10894 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10895 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction363____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10894);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10895);
   }
   REGB0 = ATTR_parser___ReduceAction363____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36433,7 +36438,7 @@ void parser___ReduceAction363___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos337]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10897;
+  fra.me.line = 10898;
   fra.me.meth = LOCATE_parser___ReduceAction363___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36441,7 +36446,7 @@ void parser___ReduceAction363___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10897 */
+  /* ./parser//parser.nit:10898 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction363____goto(fra.me.REG[1]) = REGB0;
@@ -36455,7 +36460,7 @@ void parser___ReduceAction364___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 = 10901;
+  fra.me.line = 10902;
   fra.me.meth = LOCATE_parser___ReduceAction364___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36465,25 +36470,25 @@ void parser___ReduceAction364___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:10903 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:10904 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10905 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10906 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TString, ID_TString)) /*cast nullable TString*/;
+  /* ./parser//parser.nit:10907 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TChar, ID_TChar)) /*cast nullable TChar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10906);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10907);
   }
-  /* ./parser//parser.nit:10907 */
-  fra.me.REG[3] = NEW_AStringExpr_parser_prod___AStringExpr___init_astringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10910 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10908 */
+  fra.me.REG[3] = NEW_ACharExpr_parser_prod___ACharExpr___init_acharexpr(fra.me.REG[3]);
   /* ./parser//parser.nit:10911 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10912 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction364____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10911);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10912);
   }
   REGB0 = ATTR_parser___ReduceAction364____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36499,7 +36504,7 @@ void parser___ReduceAction364___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos338]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10914;
+  fra.me.line = 10915;
   fra.me.meth = LOCATE_parser___ReduceAction364___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36507,7 +36512,7 @@ void parser___ReduceAction364___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10914 */
+  /* ./parser//parser.nit:10915 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction364____goto(fra.me.REG[1]) = REGB0;
@@ -36515,182 +36520,139 @@ void parser___ReduceAction364___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos338] = 1;
   return;
 }
-void parser___ReduceAction367___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction365___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 = 10918;
-  fra.me.meth = LOCATE_parser___ReduceAction367___action;
+  fra.me.line = 10919;
+  fra.me.meth = LOCATE_parser___ReduceAction365___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:10920 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:10921 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:10922 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10923 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:10924 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10925 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10926 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10927 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10928 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10929 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10930 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10932 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10932);
-  }
-  /* ./parser//parser.nit:10934 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10934);
-  }
-  /* ./parser//parser.nit:10936 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TString, ID_TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10936);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10924);
   }
-  /* ./parser//parser.nit:10937 */
-  fra.me.REG[3] = NEW_AAsCastExpr_parser_prod___AAsCastExpr___init_aascastexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10942 */
+  /* ./parser//parser.nit:10925 */
+  fra.me.REG[3] = NEW_AStringExpr_parser_prod___AStringExpr___init_astringexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:10928 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10943 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction367____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:10929 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction365____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10943);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10929);
   }
-  REGB0 = ATTR_parser___ReduceAction367____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction365____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction367___init(val_t p0, val_t p1, int* init_table){
-  int itpos339 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction367].i;
+void parser___ReduceAction365___init(val_t p0, val_t p1, int* init_table){
+  int itpos339 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction365].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos339]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10946;
-  fra.me.meth = LOCATE_parser___ReduceAction367___init;
+  fra.me.line = 10932;
+  fra.me.meth = LOCATE_parser___ReduceAction365___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10946 */
+  /* ./parser//parser.nit:10932 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction367____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction365____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos339] = 1;
   return;
 }
 void parser___ReduceAction368___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  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 = 10950;
+  fra.me.line = 10936;
   fra.me.meth = LOCATE_parser___ReduceAction368___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:10952 */
+  /* ./parser//parser.nit:10938 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10953 */
+  /* ./parser//parser.nit:10939 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10954 */
+  /* ./parser//parser.nit:10940 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10955 */
+  /* ./parser//parser.nit:10941 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10956 */
+  /* ./parser//parser.nit:10942 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10957 */
+  /* ./parser//parser.nit:10943 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10958 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10959 */
+  /* ./parser//parser.nit:10944 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10945 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10946 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10960 */
+  /* ./parser//parser.nit:10947 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10961 */
+  /* ./parser//parser.nit:10948 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10962 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10963 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10964 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10966 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10966);
-  }
-  /* ./parser//parser.nit:10968 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
+  /* ./parser//parser.nit:10950 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10968);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10950);
   }
-  /* ./parser//parser.nit:10970 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
+  /* ./parser//parser.nit:10952 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10970);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10952);
   }
-  /* ./parser//parser.nit:10972 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
+  /* ./parser//parser.nit:10954 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10972);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10954);
   }
-  /* ./parser//parser.nit:10973 */
-  fra.me.REG[3] = NEW_AAsNotnullExpr_parser_prod___AAsNotnullExpr___init_aasnotnullexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10979 */
+  /* ./parser//parser.nit:10955 */
+  fra.me.REG[3] = NEW_AAsCastExpr_parser_prod___AAsCastExpr___init_aascastexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10960 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10980 */
+  /* ./parser//parser.nit:10961 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction368____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10980);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10961);
   }
   REGB0 = ATTR_parser___ReduceAction368____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36706,7 +36668,7 @@ void parser___ReduceAction368___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos340]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10983;
+  fra.me.line = 10964;
   fra.me.meth = LOCATE_parser___ReduceAction368___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36714,7 +36676,7 @@ void parser___ReduceAction368___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10983 */
+  /* ./parser//parser.nit:10964 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction368____goto(fra.me.REG[1]) = REGB0;
@@ -36723,14 +36685,123 @@ void parser___ReduceAction368___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction369___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 = 10968;
+  fra.me.meth = LOCATE_parser___ReduceAction369___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:10970 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10971 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10972 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10973 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10974 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10975 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10976 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10977 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10978 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10979 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10980 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10981 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10982 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10984 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10984);
+  }
+  /* ./parser//parser.nit:10986 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10986);
+  }
+  /* ./parser//parser.nit:10988 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10988);
+  }
+  /* ./parser//parser.nit:10990 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10990);
+  }
+  /* ./parser//parser.nit:10991 */
+  fra.me.REG[3] = NEW_AAsNotnullExpr_parser_prod___AAsNotnullExpr___init_aasnotnullexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10997 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10998 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction369____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10998);
+  }
+  REGB0 = ATTR_parser___ReduceAction369____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction369___init(val_t p0, val_t p1, int* init_table){
+  int itpos341 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction369].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos341]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 11001;
+  fra.me.meth = LOCATE_parser___ReduceAction369___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit:11001 */
+  fra.me.REG[1] = fra.me.REG[0];
+  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction369____goto(fra.me.REG[1]) = REGB0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos341] = 1;
+  return;
+}
+void parser___ReduceAction370___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10987;
-  fra.me.meth = LOCATE_parser___ReduceAction369___action;
+  fra.me.line = 11005;
+  fra.me.meth = LOCATE_parser___ReduceAction370___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -36741,30 +36812,30 @@ void parser___ReduceAction369___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10989 */
+  /* ./parser//parser.nit:11007 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10990 */
+  /* ./parser//parser.nit:11008 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10991 */
+  /* ./parser//parser.nit:11009 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10992 */
+  /* ./parser//parser.nit:11010 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10994 */
+  /* ./parser//parser.nit:11012 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10994);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11012);
   }
-  /* ./parser//parser.nit:10996 */
+  /* ./parser//parser.nit:11014 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10996);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11014);
   }
-  /* ./parser//parser.nit:10997 */
+  /* ./parser//parser.nit:11015 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:10998 */
+  /* ./parser//parser.nit:11016 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36779,58 +36850,58 @@ void parser___ReduceAction369___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10999 */
+    /* ./parser//parser.nit:11017 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11001 */
+  /* ./parser//parser.nit:11019 */
   fra.me.REG[5] = NEW_ASuperstringExpr_parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[5]);
-  /* ./parser//parser.nit:11004 */
+  /* ./parser//parser.nit:11022 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11005 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction369____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11023 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction370____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11005);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11023);
   }
-  REGB0 = ATTR_parser___ReduceAction369____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction370____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction369___init(val_t p0, val_t p1, int* init_table){
-  int itpos341 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction369].i;
+void parser___ReduceAction370___init(val_t p0, val_t p1, int* init_table){
+  int itpos342 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction370].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos341]) return;
+  if (init_table[itpos342]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11008;
-  fra.me.meth = LOCATE_parser___ReduceAction369___init;
+  fra.me.line = 11026;
+  fra.me.meth = LOCATE_parser___ReduceAction370___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11008 */
+  /* ./parser//parser.nit:11026 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction369____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction370____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos341] = 1;
+  init_table[itpos342] = 1;
   return;
 }
-void parser___ReduceAction370___action(val_t p0, val_t p1){
+void parser___ReduceAction371___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11012;
-  fra.me.meth = LOCATE_parser___ReduceAction370___action;
+  fra.me.line = 11030;
+  fra.me.meth = LOCATE_parser___ReduceAction371___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -36842,41 +36913,41 @@ void parser___ReduceAction370___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11014 */
+  /* ./parser//parser.nit:11032 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11015 */
+  /* ./parser//parser.nit:11033 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11016 */
+  /* ./parser//parser.nit:11034 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11017 */
+  /* ./parser//parser.nit:11035 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11018 */
+  /* ./parser//parser.nit:11036 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11020 */
+  /* ./parser//parser.nit:11038 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11020);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11038);
   }
-  /* ./parser//parser.nit:11022 */
+  /* ./parser//parser.nit:11040 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11022);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11040);
   }
-  /* ./parser//parser.nit:11024 */
+  /* ./parser//parser.nit:11042 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11024);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11042);
   }
-  /* ./parser//parser.nit:11025 */
+  /* ./parser//parser.nit:11043 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[5]);
   fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:11026 */
+  /* ./parser//parser.nit:11044 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:11027 */
+  /* ./parser//parser.nit:11045 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36891,58 +36962,58 @@ void parser___ReduceAction370___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11028 */
+    /* ./parser//parser.nit:11046 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11030 */
+  /* ./parser//parser.nit:11048 */
   fra.me.REG[6] = NEW_ASuperstringExpr_parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[6]);
-  /* ./parser//parser.nit:11033 */
+  /* ./parser//parser.nit:11051 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:11034 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction370____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11052 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction371____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11034);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11052);
   }
-  REGB0 = ATTR_parser___ReduceAction370____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction371____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction370___init(val_t p0, val_t p1, int* init_table){
-  int itpos342 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction370].i;
+void parser___ReduceAction371___init(val_t p0, val_t p1, int* init_table){
+  int itpos343 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction371].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos342]) return;
+  if (init_table[itpos343]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11037;
-  fra.me.meth = LOCATE_parser___ReduceAction370___init;
+  fra.me.line = 11055;
+  fra.me.meth = LOCATE_parser___ReduceAction371___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11037 */
+  /* ./parser//parser.nit:11055 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction370____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction371____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos342] = 1;
+  init_table[itpos343] = 1;
   return;
 }
-void parser___ReduceAction371___action(val_t p0, val_t p1){
+void parser___ReduceAction372___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11041;
-  fra.me.meth = LOCATE_parser___ReduceAction371___action;
+  fra.me.line = 11059;
+  fra.me.meth = LOCATE_parser___ReduceAction372___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -36953,19 +37024,19 @@ void parser___ReduceAction371___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11043 */
+  /* ./parser//parser.nit:11061 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11044 */
+  /* ./parser//parser.nit:11062 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11045 */
+  /* ./parser//parser.nit:11063 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11046 */
+  /* ./parser//parser.nit:11064 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11047 */
+  /* ./parser//parser.nit:11065 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11048 */
+  /* ./parser//parser.nit:11066 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11051 */
+  /* ./parser//parser.nit:11069 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36980,10 +37051,10 @@ void parser___ReduceAction371___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11052 */
+    /* ./parser//parser.nit:11070 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:11054 */
+  /* ./parser//parser.nit:11072 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36998,55 +37069,55 @@ void parser___ReduceAction371___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11055 */
+    /* ./parser//parser.nit:11073 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11057 */
+  /* ./parser//parser.nit:11075 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11058 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction371____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11076 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction372____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11058);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11076);
   }
-  REGB0 = ATTR_parser___ReduceAction371____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction372____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction371___init(val_t p0, val_t p1, int* init_table){
-  int itpos343 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction371].i;
+void parser___ReduceAction372___init(val_t p0, val_t p1, int* init_table){
+  int itpos344 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction372].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos343]) return;
+  if (init_table[itpos344]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11061;
-  fra.me.meth = LOCATE_parser___ReduceAction371___init;
+  fra.me.line = 11079;
+  fra.me.meth = LOCATE_parser___ReduceAction372___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11061 */
+  /* ./parser//parser.nit:11079 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction371____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction372____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos343] = 1;
+  init_table[itpos344] = 1;
   return;
 }
-void parser___ReduceAction372___action(val_t p0, val_t p1){
+void parser___ReduceAction373___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11065;
-  fra.me.meth = LOCATE_parser___ReduceAction372___action;
+  fra.me.line = 11083;
+  fra.me.meth = LOCATE_parser___ReduceAction373___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -37055,64 +37126,64 @@ void parser___ReduceAction372___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:11067 */
+  /* ./parser//parser.nit:11085 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11068 */
+  /* ./parser//parser.nit:11086 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11070 */
+  /* ./parser//parser.nit:11088 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TStartString, ID_TStartString)) /*cast nullable TStartString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11070);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11088);
   }
-  /* ./parser//parser.nit:11071 */
+  /* ./parser//parser.nit:11089 */
   fra.me.REG[3] = NEW_AStartStringExpr_parser_prod___AStartStringExpr___init_astartstringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:11074 */
+  /* ./parser//parser.nit:11092 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11075 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction372____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11093 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction373____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11075);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11093);
   }
-  REGB0 = ATTR_parser___ReduceAction372____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction373____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction372___init(val_t p0, val_t p1, int* init_table){
-  int itpos344 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction372].i;
+void parser___ReduceAction373___init(val_t p0, val_t p1, int* init_table){
+  int itpos345 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction373].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos344]) return;
+  if (init_table[itpos345]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11078;
-  fra.me.meth = LOCATE_parser___ReduceAction372___init;
+  fra.me.line = 11096;
+  fra.me.meth = LOCATE_parser___ReduceAction373___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11078 */
+  /* ./parser//parser.nit:11096 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction372____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction373____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos344] = 1;
+  init_table[itpos345] = 1;
   return;
 }
-void parser___ReduceAction374___action(val_t p0, val_t p1){
+void parser___ReduceAction375___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11082;
-  fra.me.meth = LOCATE_parser___ReduceAction374___action;
+  fra.me.line = 11100;
+  fra.me.meth = LOCATE_parser___ReduceAction375___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -37121,64 +37192,64 @@ void parser___ReduceAction374___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:11084 */
+  /* ./parser//parser.nit:11102 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11085 */
+  /* ./parser//parser.nit:11103 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11087 */
+  /* ./parser//parser.nit:11105 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TMidString, ID_TMidString)) /*cast nullable TMidString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11087);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11105);
   }
-  /* ./parser//parser.nit:11088 */
+  /* ./parser//parser.nit:11106 */
   fra.me.REG[3] = NEW_AMidStringExpr_parser_prod___AMidStringExpr___init_amidstringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:11091 */
+  /* ./parser//parser.nit:11109 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11092 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction374____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11110 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction375____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11092);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11110);
   }
-  REGB0 = ATTR_parser___ReduceAction374____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction375____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction374___init(val_t p0, val_t p1, int* init_table){
-  int itpos345 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction374].i;
+void parser___ReduceAction375___init(val_t p0, val_t p1, int* init_table){
+  int itpos346 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction375].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos345]) return;
+  if (init_table[itpos346]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11095;
-  fra.me.meth = LOCATE_parser___ReduceAction374___init;
+  fra.me.line = 11113;
+  fra.me.meth = LOCATE_parser___ReduceAction375___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11095 */
+  /* ./parser//parser.nit:11113 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction374____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction375____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos345] = 1;
+  init_table[itpos346] = 1;
   return;
 }
-void parser___ReduceAction375___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[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11099;
-  fra.me.meth = LOCATE_parser___ReduceAction375___action;
+  fra.me.line = 11117;
+  fra.me.meth = LOCATE_parser___ReduceAction376___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -37187,65 +37258,65 @@ void parser___ReduceAction375___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:11101 */
+  /* ./parser//parser.nit:11119 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11102 */
+  /* ./parser//parser.nit:11120 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11104 */
+  /* ./parser//parser.nit:11122 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TEndString, ID_TEndString)) /*cast nullable TEndString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11104);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11122);
   }
-  /* ./parser//parser.nit:11105 */
+  /* ./parser//parser.nit:11123 */
   fra.me.REG[3] = NEW_AEndStringExpr_parser_prod___AEndStringExpr___init_aendstringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:11108 */
+  /* ./parser//parser.nit:11126 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11109 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction375____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11127 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction376____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11109);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11127);
   }
-  REGB0 = ATTR_parser___ReduceAction375____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction376____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction375___init(val_t p0, val_t p1, int* init_table){
-  int itpos346 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction375].i;
+void parser___ReduceAction376___init(val_t p0, val_t p1, int* init_table){
+  int itpos347 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction376].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos346]) return;
+  if (init_table[itpos347]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11112;
-  fra.me.meth = LOCATE_parser___ReduceAction375___init;
+  fra.me.line = 11130;
+  fra.me.meth = LOCATE_parser___ReduceAction376___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11112 */
+  /* ./parser//parser.nit:11130 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction375____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction376____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos346] = 1;
+  init_table[itpos347] = 1;
   return;
 }
-void parser___ReduceAction376___action(val_t p0, val_t p1){
+void parser___ReduceAction377___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11116;
-  fra.me.meth = LOCATE_parser___ReduceAction376___action;
+  fra.me.line = 11134;
+  fra.me.meth = LOCATE_parser___ReduceAction377___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -37255,21 +37326,21 @@ void parser___ReduceAction376___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:11118 */
+  /* ./parser//parser.nit:11136 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11119 */
+  /* ./parser//parser.nit:11137 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11120 */
+  /* ./parser//parser.nit:11138 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11121 */
+  /* ./parser//parser.nit:11139 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11122 */
+  /* ./parser//parser.nit:11140 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11123 */
+  /* ./parser//parser.nit:11141 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11124 */
+  /* ./parser//parser.nit:11142 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11126 */
+  /* ./parser//parser.nit:11144 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37284,56 +37355,56 @@ void parser___ReduceAction376___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11127 */
+    /* ./parser//parser.nit:11145 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11129 */
+  /* ./parser//parser.nit:11147 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11130 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction376____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11148 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction377____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11130);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11148);
   }
-  REGB0 = ATTR_parser___ReduceAction376____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction377____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction376___init(val_t p0, val_t p1, int* init_table){
-  int itpos347 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction376].i;
+void parser___ReduceAction377___init(val_t p0, val_t p1, int* init_table){
+  int itpos348 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction377].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos347]) return;
+  if (init_table[itpos348]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11133;
-  fra.me.meth = LOCATE_parser___ReduceAction376___init;
+  fra.me.line = 11151;
+  fra.me.meth = LOCATE_parser___ReduceAction377___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11133 */
+  /* ./parser//parser.nit:11151 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction376____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction377____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos347] = 1;
+  init_table[itpos348] = 1;
   return;
 }
-void parser___ReduceAction377___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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11137;
-  fra.me.meth = LOCATE_parser___ReduceAction377___action;
+  fra.me.line = 11155;
+  fra.me.meth = LOCATE_parser___ReduceAction378___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -37344,29 +37415,29 @@ void parser___ReduceAction377___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:11139 */
+  /* ./parser//parser.nit:11157 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11140 */
+  /* ./parser//parser.nit:11158 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11141 */
+  /* ./parser//parser.nit:11159 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11142 */
+  /* ./parser//parser.nit:11160 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11143 */
+  /* ./parser//parser.nit:11161 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11144 */
+  /* ./parser//parser.nit:11162 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11145 */
+  /* ./parser//parser.nit:11163 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11146 */
+  /* ./parser//parser.nit:11164 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11149 */
+  /* ./parser//parser.nit:11167 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11149);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11167);
   }
-  /* ./parser//parser.nit:11150 */
+  /* ./parser//parser.nit:11168 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37381,58 +37452,58 @@ void parser___ReduceAction377___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11151 */
+    /* ./parser//parser.nit:11169 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:11153 */
+  /* ./parser//parser.nit:11171 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:11154 */
+  /* ./parser//parser.nit:11172 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11155 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction377____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11173 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction378____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11155);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11173);
   }
-  REGB0 = ATTR_parser___ReduceAction377____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction378____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction377___init(val_t p0, val_t p1, int* init_table){
-  int itpos348 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction377].i;
+void parser___ReduceAction378___init(val_t p0, val_t p1, int* init_table){
+  int itpos349 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction378].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos348]) return;
+  if (init_table[itpos349]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11158;
-  fra.me.meth = LOCATE_parser___ReduceAction377___init;
+  fra.me.line = 11176;
+  fra.me.meth = LOCATE_parser___ReduceAction378___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11158 */
+  /* ./parser//parser.nit:11176 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction377____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction378____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos348] = 1;
+  init_table[itpos349] = 1;
   return;
 }
-void parser___ReduceAction379___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[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11162;
-  fra.me.meth = LOCATE_parser___ReduceAction379___action;
+  fra.me.line = 11180;
+  fra.me.meth = LOCATE_parser___ReduceAction380___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -37441,57 +37512,57 @@ void parser___ReduceAction379___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:11164 */
+  /* ./parser//parser.nit:11182 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11165 */
+  /* ./parser//parser.nit:11183 */
   fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11166 */
+  /* ./parser//parser.nit:11184 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11167 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction379____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11185 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction380____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11167);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11185);
   }
-  REGB0 = ATTR_parser___ReduceAction379____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction380____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction379___init(val_t p0, val_t p1, int* init_table){
-  int itpos349 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction379].i;
+void parser___ReduceAction380___init(val_t p0, val_t p1, int* init_table){
+  int itpos350 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction380].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos349]) return;
+  if (init_table[itpos350]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11170;
-  fra.me.meth = LOCATE_parser___ReduceAction379___init;
+  fra.me.line = 11188;
+  fra.me.meth = LOCATE_parser___ReduceAction380___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11170 */
+  /* ./parser//parser.nit:11188 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction379____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction380____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos349] = 1;
+  init_table[itpos350] = 1;
   return;
 }
-void parser___ReduceAction382___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[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11174;
-  fra.me.meth = LOCATE_parser___ReduceAction382___action;
+  fra.me.line = 11192;
+  fra.me.meth = LOCATE_parser___ReduceAction383___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -37501,13 +37572,13 @@ void parser___ReduceAction382___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11176 */
+  /* ./parser//parser.nit:11194 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11177 */
+  /* ./parser//parser.nit:11195 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11178 */
+  /* ./parser//parser.nit:11196 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11180 */
+  /* ./parser//parser.nit:11198 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37522,108 +37593,43 @@ void parser___ReduceAction382___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11181 */
+    /* ./parser//parser.nit:11199 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11183 */
+  /* ./parser//parser.nit:11201 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11184 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction382____goto(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11184);
-  }
-  REGB0 = ATTR_parser___ReduceAction382____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction382___init(val_t p0, val_t p1, int* init_table){
-  int itpos350 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction382].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos350]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11187;
-  fra.me.meth = LOCATE_parser___ReduceAction382___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11187 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction382____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos350] = 1;
-  return;
-}
-void parser___ReduceAction387___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11191;
-  fra.me.meth = LOCATE_parser___ReduceAction387___action;
-  fra.me.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:11193 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11194 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11195 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11196 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11197 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11199 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11200 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction387____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11202 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction383____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11200);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11202);
   }
-  REGB0 = ATTR_parser___ReduceAction387____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction383____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction387___init(val_t p0, val_t p1, int* init_table){
-  int itpos351 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction387].i;
+void parser___ReduceAction383___init(val_t p0, val_t p1, int* init_table){
+  int itpos351 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction383].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos351]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11203;
-  fra.me.meth = LOCATE_parser___ReduceAction387___init;
+  fra.me.line = 11205;
+  fra.me.meth = LOCATE_parser___ReduceAction383___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11203 */
+  /* ./parser//parser.nit:11205 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction387____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction383____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos351] = 1;
   return;
@@ -37634,7 +37640,7 @@ void parser___ReduceAction388___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 = 11207;
+  fra.me.line = 11209;
   fra.me.meth = LOCATE_parser___ReduceAction388___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -37645,27 +37651,18 @@ void parser___ReduceAction388___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11209 */
+  /* ./parser//parser.nit:11211 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11210 */
+  /* ./parser//parser.nit:11212 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11211 */
+  /* ./parser//parser.nit:11213 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11212 */
+  /* ./parser//parser.nit:11214 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11213 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11215 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11215);
-  }
-  /* ./parser//parser.nit:11216 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11217 */
-  fra.me.REG[2] = fra.me.REG[4];
+  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:11218 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction388____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -37724,23 +37721,27 @@ void parser___ReduceAction389___action(val_t p0, val_t p1){
   /* ./parser//parser.nit:11228 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11229 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11230 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11231 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11233 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11231);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11233);
   }
-  /* ./parser//parser.nit:11232 */
+  /* ./parser//parser.nit:11234 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
   fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:11233 */
+  /* ./parser//parser.nit:11235 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11234 */
+  /* ./parser//parser.nit:11236 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction389____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11234);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11236);
   }
   REGB0 = ATTR_parser___ReduceAction389____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37756,7 +37757,7 @@ void parser___ReduceAction389___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos353]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11237;
+  fra.me.line = 11239;
   fra.me.meth = LOCATE_parser___ReduceAction389___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37764,7 +37765,7 @@ void parser___ReduceAction389___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11237 */
+  /* ./parser//parser.nit:11239 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction389____goto(fra.me.REG[1]) = REGB0;
@@ -37775,11 +37776,10 @@ void parser___ReduceAction389___init(val_t p0, val_t p1, int* init_table){
 void parser___ReduceAction390___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11241;
+  fra.me.line = 11243;
   fra.me.meth = LOCATE_parser___ReduceAction390___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -37790,37 +37790,28 @@ void parser___ReduceAction390___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11243 */
+  /* ./parser//parser.nit:11245 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11244 */
+  /* ./parser//parser.nit:11246 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11245 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11247 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11249 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11248 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11249);
   }
   /* ./parser//parser.nit:11250 */
-  fra.me.REG[2] = fra.me.REG[4];
+  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:11251 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11252 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction390____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11251);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11252);
   }
   REGB0 = ATTR_parser___ReduceAction390____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37836,7 +37827,7 @@ void parser___ReduceAction390___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos354]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11254;
+  fra.me.line = 11255;
   fra.me.meth = LOCATE_parser___ReduceAction390___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37844,7 +37835,7 @@ void parser___ReduceAction390___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11254 */
+  /* ./parser//parser.nit:11255 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction390____goto(fra.me.REG[1]) = REGB0;
@@ -37853,48 +37844,30 @@ void parser___ReduceAction390___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction391___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[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 = 11258;
+  fra.me.line = 11259;
   fra.me.meth = LOCATE_parser___ReduceAction391___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:11260 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11261 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11262 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11263 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11264 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11265 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11266 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11268 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11268);
-  }
-  /* ./parser//parser.nit:11270 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11271 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37909,16 +37882,16 @@ void parser___ReduceAction391___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11272 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:11266 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11274 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11275 */
+  /* ./parser//parser.nit:11268 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11269 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction391____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11275);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11269);
   }
   REGB0 = ATTR_parser___ReduceAction391____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37934,7 +37907,7 @@ void parser___ReduceAction391___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos355]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11278;
+  fra.me.line = 11272;
   fra.me.meth = LOCATE_parser___ReduceAction391___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37942,7 +37915,7 @@ void parser___ReduceAction391___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11278 */
+  /* ./parser//parser.nit:11272 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction391____goto(fra.me.REG[1]) = REGB0;
@@ -37951,43 +37924,72 @@ void parser___ReduceAction391___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction392___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[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 = 11282;
+  fra.me.line = 11276;
   fra.me.meth = LOCATE_parser___ReduceAction392___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:11284 */
+  /* ./parser//parser.nit:11278 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11285 */
+  /* ./parser//parser.nit:11279 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11280 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11281 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11282 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11283 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11284 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11286 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11288 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11288);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11286);
   }
+  /* ./parser//parser.nit:11288 */
+  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:11289 */
-  fra.me.REG[3] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[4], fra.me.REG[3]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:11290 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:11292 */
+  fra.me.REG[2] = fra.me.REG[5];
   /* ./parser//parser.nit:11293 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11294 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction392____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11294);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11293);
   }
   REGB0 = ATTR_parser___ReduceAction392____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38003,7 +38005,7 @@ void parser___ReduceAction392___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos356]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11297;
+  fra.me.line = 11296;
   fra.me.meth = LOCATE_parser___ReduceAction392___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38011,7 +38013,7 @@ void parser___ReduceAction392___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11297 */
+  /* ./parser//parser.nit:11296 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction392____goto(fra.me.REG[1]) = REGB0;
@@ -38020,55 +38022,43 @@ void parser___ReduceAction392___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction393___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[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 = 11301;
+  fra.me.line = 11300;
   fra.me.meth = LOCATE_parser___ReduceAction393___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:11303 */
+  /* ./parser//parser.nit:11302 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11304 */
+  /* ./parser//parser.nit:11303 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11305 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11304 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11306 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11308 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11308);
-  }
-  /* ./parser//parser.nit:11309 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11311 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11311);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11306);
   }
-  /* ./parser//parser.nit:11312 */
-  fra.me.REG[3] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:11316 */
+  /* ./parser//parser.nit:11307 */
+  fra.me.REG[3] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:11311 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11317 */
+  /* ./parser//parser.nit:11312 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction393____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11317);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11312);
   }
   REGB0 = ATTR_parser___ReduceAction393____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38084,7 +38074,7 @@ void parser___ReduceAction393___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos357]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11320;
+  fra.me.line = 11315;
   fra.me.meth = LOCATE_parser___ReduceAction393___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38092,7 +38082,7 @@ void parser___ReduceAction393___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11320 */
+  /* ./parser//parser.nit:11315 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction393____goto(fra.me.REG[1]) = REGB0;
@@ -38101,46 +38091,55 @@ void parser___ReduceAction393___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction394___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[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 = 11324;
+  fra.me.line = 11319;
   fra.me.meth = LOCATE_parser___ReduceAction394___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:11326 */
+  /* ./parser//parser.nit:11321 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11327 */
+  /* ./parser//parser.nit:11322 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11328 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11330 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:11323 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11324 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11326 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11330);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11326);
   }
-  /* ./parser//parser.nit:11331 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:11332 */
-  fra.me.REG[4] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[4], NIT_NULL);
-  /* ./parser//parser.nit:11336 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11337 */
+  /* ./parser//parser.nit:11327 */
+  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:11329 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11329);
+  }
+  /* ./parser//parser.nit:11330 */
+  fra.me.REG[3] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[5], fra.me.REG[3]);
+  /* ./parser//parser.nit:11334 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:11335 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction394____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11337);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11335);
   }
   REGB0 = ATTR_parser___ReduceAction394____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38156,7 +38155,7 @@ void parser___ReduceAction394___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos358]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11340;
+  fra.me.line = 11338;
   fra.me.meth = LOCATE_parser___ReduceAction394___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38164,7 +38163,7 @@ void parser___ReduceAction394___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11340 */
+  /* ./parser//parser.nit:11338 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction394____goto(fra.me.REG[1]) = REGB0;
@@ -38173,36 +38172,46 @@ void parser___ReduceAction394___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction395___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[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 = 11344;
+  fra.me.line = 11342;
   fra.me.meth = LOCATE_parser___ReduceAction395___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11346 */
+  /* ./parser//parser.nit:11344 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11347 */
+  /* ./parser//parser.nit:11345 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11346 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11348 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11348);
+  }
   /* ./parser//parser.nit:11349 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11351 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11352 */
+  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:11350 */
+  fra.me.REG[4] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[4], NIT_NULL);
+  /* ./parser//parser.nit:11354 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11355 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction395____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11352);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11355);
   }
   REGB0 = ATTR_parser___ReduceAction395____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38218,7 +38227,7 @@ void parser___ReduceAction395___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos359]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11355;
+  fra.me.line = 11358;
   fra.me.meth = LOCATE_parser___ReduceAction395___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38226,7 +38235,7 @@ void parser___ReduceAction395___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11355 */
+  /* ./parser//parser.nit:11358 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction395____goto(fra.me.REG[1]) = REGB0;
@@ -38240,7 +38249,7 @@ void parser___ReduceAction396___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 = 11359;
+  fra.me.line = 11362;
   fra.me.meth = LOCATE_parser___ReduceAction396___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38250,21 +38259,21 @@ 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:11361 */
+  /* ./parser//parser.nit:11364 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11362 */
+  /* ./parser//parser.nit:11365 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11363 */
+  /* ./parser//parser.nit:11366 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11364 */
+  /* ./parser//parser.nit:11367 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11366 */
+  /* ./parser//parser.nit:11369 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11367 */
+  /* ./parser//parser.nit:11370 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction396____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11367);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11370);
   }
   REGB0 = ATTR_parser___ReduceAction396____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38280,7 +38289,7 @@ void parser___ReduceAction396___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos360]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11370;
+  fra.me.line = 11373;
   fra.me.meth = LOCATE_parser___ReduceAction396___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38288,7 +38297,7 @@ void parser___ReduceAction396___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11370 */
+  /* ./parser//parser.nit:11373 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction396____goto(fra.me.REG[1]) = REGB0;
@@ -38302,7 +38311,7 @@ void parser___ReduceAction397___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 = 11374;
+  fra.me.line = 11377;
   fra.me.meth = LOCATE_parser___ReduceAction397___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38312,15 +38321,21 @@ 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:11376 */
+  /* ./parser//parser.nit:11379 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11377 */
+  /* ./parser//parser.nit:11380 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11381 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11382 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11378 */
+  /* ./parser//parser.nit:11384 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:11385 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction397____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11378);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11385);
   }
   REGB0 = ATTR_parser___ReduceAction397____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38336,7 +38351,7 @@ void parser___ReduceAction397___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos361]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11381;
+  fra.me.line = 11388;
   fra.me.meth = LOCATE_parser___ReduceAction397___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38344,7 +38359,7 @@ void parser___ReduceAction397___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11381 */
+  /* ./parser//parser.nit:11388 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction397____goto(fra.me.REG[1]) = REGB0;
@@ -38352,74 +38367,58 @@ void parser___ReduceAction397___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos361] = 1;
   return;
 }
-void parser___ReduceAction399___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+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 = 11385;
-  fra.me.meth = LOCATE_parser___ReduceAction399___action;
+  fra.me.line = 11392;
+  fra.me.meth = LOCATE_parser___ReduceAction398___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:11387 */
+  /* ./parser//parser.nit:11394 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11388 */
+  /* ./parser//parser.nit:11395 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11389 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11391 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11391);
-  }
-  /* ./parser//parser.nit:11392 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:11393 */
-  fra.me.REG[4] = NEW_ADoc_parser_prod___ADoc___init_adoc(fra.me.REG[4]);
   /* ./parser//parser.nit:11396 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11397 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction399____goto(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction398____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11397);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11396);
   }
-  REGB0 = ATTR_parser___ReduceAction399____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction398____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction399___init(val_t p0, val_t p1, int* init_table){
-  int itpos362 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction399].i;
+void parser___ReduceAction398___init(val_t p0, val_t p1, int* init_table){
+  int itpos362 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction398].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos362]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11400;
-  fra.me.meth = LOCATE_parser___ReduceAction399___init;
+  fra.me.line = 11399;
+  fra.me.meth = LOCATE_parser___ReduceAction398___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11400 */
+  /* ./parser//parser.nit:11399 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction399____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction398____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos362] = 1;
   return;
@@ -38430,7 +38429,7 @@ void parser___ReduceAction400___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 = 11404;
+  fra.me.line = 11403;
   fra.me.meth = LOCATE_parser___ReduceAction400___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -38441,32 +38440,30 @@ void parser___ReduceAction400___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11406 */
+  /* ./parser//parser.nit:11405 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11407 */
+  /* ./parser//parser.nit:11406 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11408 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11409 */
+  /* ./parser//parser.nit:11407 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11411 */
+  /* ./parser//parser.nit:11409 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11411);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11409);
   }
-  /* ./parser//parser.nit:11412 */
+  /* ./parser//parser.nit:11410 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
   fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:11413 */
+  /* ./parser//parser.nit:11411 */
   fra.me.REG[4] = NEW_ADoc_parser_prod___ADoc___init_adoc(fra.me.REG[4]);
-  /* ./parser//parser.nit:11416 */
+  /* ./parser//parser.nit:11414 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11417 */
+  /* ./parser//parser.nit:11415 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction400____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11417);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11415);
   }
   REGB0 = ATTR_parser___ReduceAction400____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38482,7 +38479,7 @@ void parser___ReduceAction400___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos363]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11420;
+  fra.me.line = 11418;
   fra.me.meth = LOCATE_parser___ReduceAction400___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38490,7 +38487,7 @@ void parser___ReduceAction400___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11420 */
+  /* ./parser//parser.nit:11418 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction400____goto(fra.me.REG[1]) = REGB0;
@@ -38498,88 +38495,104 @@ void parser___ReduceAction400___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos363] = 1;
   return;
 }
-void parser___ReduceAction402___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction401___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 = 11424;
-  fra.me.meth = LOCATE_parser___ReduceAction402___action;
+  fra.me.line = 11422;
+  fra.me.meth = LOCATE_parser___ReduceAction401___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11426 */
+  /* ./parser//parser.nit:11424 */
   fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11425 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11426 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11427 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11428 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction402____goto(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11429 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11429);
+  }
+  /* ./parser//parser.nit:11430 */
+  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:11431 */
+  fra.me.REG[4] = NEW_ADoc_parser_prod___ADoc___init_adoc(fra.me.REG[4]);
+  /* ./parser//parser.nit:11434 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11435 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction401____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11428);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11435);
   }
-  REGB0 = ATTR_parser___ReduceAction402____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction401____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction402___init(val_t p0, val_t p1, int* init_table){
-  int itpos364 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction402].i;
+void parser___ReduceAction401___init(val_t p0, val_t p1, int* init_table){
+  int itpos364 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction401].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos364]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11431;
-  fra.me.meth = LOCATE_parser___ReduceAction402___init;
+  fra.me.line = 11438;
+  fra.me.meth = LOCATE_parser___ReduceAction401___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11431 */
+  /* ./parser//parser.nit:11438 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction402____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction401____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos364] = 1;
   return;
 }
 void parser___ReduceAction403___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11435;
+  fra.me.line = 11442;
   fra.me.meth = LOCATE_parser___ReduceAction403___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11437 */
+  /* ./parser//parser.nit:11444 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11438 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11440 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11441 */
+  /* ./parser//parser.nit:11445 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11446 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction403____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11441);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11446);
   }
   REGB0 = ATTR_parser___ReduceAction403____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38595,7 +38608,7 @@ void parser___ReduceAction403___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos365]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11444;
+  fra.me.line = 11449;
   fra.me.meth = LOCATE_parser___ReduceAction403___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38603,7 +38616,7 @@ void parser___ReduceAction403___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11444 */
+  /* ./parser//parser.nit:11449 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction403____goto(fra.me.REG[1]) = REGB0;
@@ -38617,7 +38630,7 @@ void parser___ReduceAction404___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 = 11448;
+  fra.me.line = 11453;
   fra.me.meth = LOCATE_parser___ReduceAction404___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38627,17 +38640,17 @@ void parser___ReduceAction404___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:11450 */
+  /* ./parser//parser.nit:11455 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11451 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11452 */
+  /* ./parser//parser.nit:11456 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11453 */
+  /* ./parser//parser.nit:11458 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:11459 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction404____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11453);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11459);
   }
   REGB0 = ATTR_parser___ReduceAction404____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38653,7 +38666,7 @@ void parser___ReduceAction404___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos366]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11456;
+  fra.me.line = 11462;
   fra.me.meth = LOCATE_parser___ReduceAction404___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38661,7 +38674,7 @@ void parser___ReduceAction404___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11456 */
+  /* ./parser//parser.nit:11462 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction404____goto(fra.me.REG[1]) = REGB0;
@@ -38675,7 +38688,7 @@ void parser___ReduceAction405___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 = 11460;
+  fra.me.line = 11466;
   fra.me.meth = LOCATE_parser___ReduceAction405___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38685,19 +38698,17 @@ void parser___ReduceAction405___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:11462 */
+  /* ./parser//parser.nit:11468 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11463 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11464 */
+  /* ./parser//parser.nit:11469 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11465 */
+  /* ./parser//parser.nit:11470 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11466 */
+  /* ./parser//parser.nit:11471 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction405____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11466);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11471);
   }
   REGB0 = ATTR_parser___ReduceAction405____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38713,7 +38724,7 @@ void parser___ReduceAction405___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos367]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11469;
+  fra.me.line = 11474;
   fra.me.meth = LOCATE_parser___ReduceAction405___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38721,7 +38732,7 @@ void parser___ReduceAction405___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11469 */
+  /* ./parser//parser.nit:11474 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction405____goto(fra.me.REG[1]) = REGB0;
@@ -38729,134 +38740,119 @@ void parser___ReduceAction405___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos367] = 1;
   return;
 }
-void parser___ReduceAction657___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction406___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11473;
-  fra.me.meth = LOCATE_parser___ReduceAction657___action;
+  fra.me.line = 11478;
+  fra.me.meth = LOCATE_parser___ReduceAction406___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:11475 */
+  /* ./parser//parser.nit:11480 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11476 */
+  /* ./parser//parser.nit:11481 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11477 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11478 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11480 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11480);
-  }
   /* ./parser//parser.nit:11482 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11482);
-  }
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11483 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11484 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction406____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11484);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11484);
   }
-  /* ./parser//parser.nit:11485 */
-  fra.me.REG[3] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:11490 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11491 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction657____goto(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11491);
-  }
-  REGB0 = ATTR_parser___ReduceAction657____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction406____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction657___init(val_t p0, val_t p1, int* init_table){
-  int itpos368 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction657].i;
+void parser___ReduceAction406___init(val_t p0, val_t p1, int* init_table){
+  int itpos368 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction406].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos368]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11494;
-  fra.me.meth = LOCATE_parser___ReduceAction657___init;
+  fra.me.line = 11487;
+  fra.me.meth = LOCATE_parser___ReduceAction406___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11494 */
+  /* ./parser//parser.nit:11487 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction657____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction406____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos368] = 1;
   return;
 }
 void parser___ReduceAction658___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  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 = 11498;
+  fra.me.line = 11491;
   fra.me.meth = LOCATE_parser___ReduceAction658___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:11500 */
+  /* ./parser//parser.nit:11493 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11501 */
+  /* ./parser//parser.nit:11494 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11502 */
+  /* ./parser//parser.nit:11495 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11504 */
+  /* ./parser//parser.nit:11496 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11498 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11498);
+  }
+  /* ./parser//parser.nit:11500 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11504);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11500);
   }
-  /* ./parser//parser.nit:11506 */
+  /* ./parser//parser.nit:11502 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11506);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11502);
   }
-  /* ./parser//parser.nit:11507 */
-  fra.me.REG[3] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:11511 */
+  /* ./parser//parser.nit:11503 */
+  fra.me.REG[3] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:11508 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11512 */
+  /* ./parser//parser.nit:11509 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction658____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11512);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11509);
   }
   REGB0 = ATTR_parser___ReduceAction658____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38872,7 +38868,7 @@ void parser___ReduceAction658___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos369]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11515;
+  fra.me.line = 11512;
   fra.me.meth = LOCATE_parser___ReduceAction658___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38880,7 +38876,7 @@ void parser___ReduceAction658___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11515 */
+  /* ./parser//parser.nit:11512 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction658____goto(fra.me.REG[1]) = REGB0;
@@ -38889,67 +38885,49 @@ void parser___ReduceAction658___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction659___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[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 = 11519;
+  fra.me.line = 11516;
   fra.me.meth = LOCATE_parser___ReduceAction659___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11521 */
+  /* ./parser//parser.nit:11518 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11522 */
+  /* ./parser//parser.nit:11519 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11523 */
+  /* ./parser//parser.nit:11520 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11524 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11525 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11526 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11528 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11528);
-  }
-  /* ./parser//parser.nit:11530 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:11522 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11530);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11522);
   }
-  /* ./parser//parser.nit:11532 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:11524 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11532);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11524);
   }
-  /* ./parser//parser.nit:11533 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:11534 */
-  fra.me.REG[7] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:11540 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:11541 */
+  /* ./parser//parser.nit:11525 */
+  fra.me.REG[3] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:11529 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:11530 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction659____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11541);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11530);
   }
   REGB0 = ATTR_parser___ReduceAction659____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38965,7 +38943,7 @@ void parser___ReduceAction659___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos370]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11544;
+  fra.me.line = 11533;
   fra.me.meth = LOCATE_parser___ReduceAction659___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38973,7 +38951,7 @@ void parser___ReduceAction659___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11544 */
+  /* ./parser//parser.nit:11533 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction659____goto(fra.me.REG[1]) = REGB0;
@@ -38981,16 +38959,16 @@ void parser___ReduceAction659___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos370] = 1;
   return;
 }
-void parser___ReduceAction662___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction660___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11548;
-  fra.me.meth = LOCATE_parser___ReduceAction662___action;
+  fra.me.line = 11537;
+  fra.me.meth = LOCATE_parser___ReduceAction660___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -38998,137 +38976,168 @@ void parser___ReduceAction662___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:11550 */
+  /* ./parser//parser.nit:11539 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11551 */
+  /* ./parser//parser.nit:11540 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11552 */
+  /* ./parser//parser.nit:11541 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11553 */
+  /* ./parser//parser.nit:11542 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11554 */
+  /* ./parser//parser.nit:11543 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11556 */
+  /* ./parser//parser.nit:11544 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11546 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11556);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11546);
   }
-  /* ./parser//parser.nit:11558 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* ./parser//parser.nit:11548 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11558);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11548);
   }
-  /* ./parser//parser.nit:11560 */
+  /* ./parser//parser.nit:11550 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11560);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11550);
   }
-  /* ./parser//parser.nit:11561 */
+  /* ./parser//parser.nit:11551 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
   fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:11562 */
-  fra.me.REG[6] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:11567 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:11568 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction662____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11552 */
+  fra.me.REG[7] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[7]);
+  /* ./parser//parser.nit:11558 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:11559 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction660____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11568);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11559);
   }
-  REGB0 = ATTR_parser___ReduceAction662____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction660____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction662___init(val_t p0, val_t p1, int* init_table){
-  int itpos371 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction662].i;
+void parser___ReduceAction660___init(val_t p0, val_t p1, int* init_table){
+  int itpos371 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction660].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos371]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11571;
-  fra.me.meth = LOCATE_parser___ReduceAction662___init;
+  fra.me.line = 11562;
+  fra.me.meth = LOCATE_parser___ReduceAction660___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11571 */
+  /* ./parser//parser.nit:11562 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction662____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction660____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos371] = 1;
   return;
 }
-void parser___ReduceAction675___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction663___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 = 11575;
-  fra.me.meth = LOCATE_parser___ReduceAction675___action;
+  fra.me.line = 11566;
+  fra.me.meth = LOCATE_parser___ReduceAction663___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:11577 */
+  /* ./parser//parser.nit:11568 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11578 */
+  /* ./parser//parser.nit:11569 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11570 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11571 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11572 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11574 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11574);
+  }
+  /* ./parser//parser.nit:11576 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11576);
+  }
+  /* ./parser//parser.nit:11578 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11578);
+  }
   /* ./parser//parser.nit:11579 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  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:11580 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11582 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11583 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction675____goto(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[6] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
+  /* ./parser//parser.nit:11585 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:11586 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction663____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11583);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11586);
   }
-  REGB0 = ATTR_parser___ReduceAction675____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction663____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction675___init(val_t p0, val_t p1, int* init_table){
-  int itpos372 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction675].i;
+void parser___ReduceAction663___init(val_t p0, val_t p1, int* init_table){
+  int itpos372 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction663].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos372]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11586;
-  fra.me.meth = LOCATE_parser___ReduceAction675___init;
+  fra.me.line = 11589;
+  fra.me.meth = LOCATE_parser___ReduceAction663___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11586 */
+  /* ./parser//parser.nit:11589 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction675____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction663____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos372] = 1;
   return;
@@ -39139,7 +39148,7 @@ void parser___ReduceAction676___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 = 11590;
+  fra.me.line = 11593;
   fra.me.meth = LOCATE_parser___ReduceAction676___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39149,17 +39158,21 @@ void parser___ReduceAction676___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:11592 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11593 */
-  fra.me.REG[3] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
   /* ./parser//parser.nit:11595 */
-  fra.me.REG[2] = fra.me.REG[3];
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11596 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11597 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11598 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11600 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:11601 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction676____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11596);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11601);
   }
   REGB0 = ATTR_parser___ReduceAction676____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39175,7 +39188,7 @@ void parser___ReduceAction676___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos373]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11599;
+  fra.me.line = 11604;
   fra.me.meth = LOCATE_parser___ReduceAction676___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39183,7 +39196,7 @@ void parser___ReduceAction676___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11599 */
+  /* ./parser//parser.nit:11604 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction676____goto(fra.me.REG[1]) = REGB0;
@@ -39191,123 +39204,89 @@ void parser___ReduceAction676___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos373] = 1;
   return;
 }
-void parser___ReduceAction683___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction677___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11603;
-  fra.me.meth = LOCATE_parser___ReduceAction683___action;
+  fra.me.line = 11608;
+  fra.me.meth = LOCATE_parser___ReduceAction677___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:11605 */
+  /* ./parser//parser.nit:11610 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11606 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11607 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11609 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11610 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  /* ./parser//parser.nit:11612 */
-  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11611 */
+  fra.me.REG[3] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
   /* ./parser//parser.nit:11613 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction683____goto(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:11614 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction677____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11613);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11614);
   }
-  REGB0 = ATTR_parser___ReduceAction683____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction677____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction683___init(val_t p0, val_t p1, int* init_table){
-  int itpos374 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction683].i;
+void parser___ReduceAction677___init(val_t p0, val_t p1, int* init_table){
+  int itpos374 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction677].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos374]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11616;
-  fra.me.meth = LOCATE_parser___ReduceAction683___init;
+  fra.me.line = 11617;
+  fra.me.meth = LOCATE_parser___ReduceAction677___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11616 */
+  /* ./parser//parser.nit:11617 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction683____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction677____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos374] = 1;
   return;
 }
 void parser___ReduceAction684___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  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 = 11620;
+  fra.me.line = 11621;
   fra.me.meth = LOCATE_parser___ReduceAction684___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:11622 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11623 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11624 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11625 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11627 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11627);
-  }
-  /* ./parser//parser.nit:11629 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11630 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39322,16 +39301,16 @@ void parser___ReduceAction684___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11631 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:11628 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11633 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11634 */
+  /* ./parser//parser.nit:11630 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11631 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction684____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11634);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11631);
   }
   REGB0 = ATTR_parser___ReduceAction684____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39347,7 +39326,7 @@ void parser___ReduceAction684___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos375]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11637;
+  fra.me.line = 11634;
   fra.me.meth = LOCATE_parser___ReduceAction684___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39355,7 +39334,7 @@ void parser___ReduceAction684___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11637 */
+  /* ./parser//parser.nit:11634 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction684____goto(fra.me.REG[1]) = REGB0;
@@ -39364,30 +39343,42 @@ void parser___ReduceAction684___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction685___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[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 = 11641;
+  fra.me.line = 11638;
   fra.me.meth = LOCATE_parser___ReduceAction685___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:11643 */
+  /* ./parser//parser.nit:11640 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11644 */
+  /* ./parser//parser.nit:11641 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11642 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11643 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11645 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11645);
+  }
   /* ./parser//parser.nit:11647 */
+  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:11648 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39402,16 +39393,16 @@ void parser___ReduceAction685___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11648 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* ./parser//parser.nit:11649 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11650 */
-  fra.me.REG[2] = fra.me.REG[4];
   /* ./parser//parser.nit:11651 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11652 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction685____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11651);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11652);
   }
   REGB0 = ATTR_parser___ReduceAction685____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39427,7 +39418,7 @@ void parser___ReduceAction685___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos376]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11654;
+  fra.me.line = 11655;
   fra.me.meth = LOCATE_parser___ReduceAction685___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39435,7 +39426,7 @@ void parser___ReduceAction685___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11654 */
+  /* ./parser//parser.nit:11655 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction685____goto(fra.me.REG[1]) = REGB0;
@@ -39444,42 +39435,30 @@ void parser___ReduceAction685___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction686___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[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 = 11658;
+  fra.me.line = 11659;
   fra.me.meth = LOCATE_parser___ReduceAction686___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:11660 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11661 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11662 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11663 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11665 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11665);
-  }
-  /* ./parser//parser.nit:11667 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11668 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39494,16 +39473,16 @@ void parser___ReduceAction686___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11669 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:11666 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11671 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11672 */
+  /* ./parser//parser.nit:11668 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11669 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction686____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11672);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11669);
   }
   REGB0 = ATTR_parser___ReduceAction686____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39519,7 +39498,7 @@ void parser___ReduceAction686___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos377]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11675;
+  fra.me.line = 11672;
   fra.me.meth = LOCATE_parser___ReduceAction686___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39527,7 +39506,7 @@ void parser___ReduceAction686___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11675 */
+  /* ./parser//parser.nit:11672 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction686____goto(fra.me.REG[1]) = REGB0;
@@ -39536,30 +39515,42 @@ void parser___ReduceAction686___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction687___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[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 = 11679;
+  fra.me.line = 11676;
   fra.me.meth = LOCATE_parser___ReduceAction687___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:11681 */
+  /* ./parser//parser.nit:11678 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11682 */
+  /* ./parser//parser.nit:11679 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11680 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11681 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11683 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11683);
+  }
   /* ./parser//parser.nit:11685 */
+  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:11686 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39574,16 +39565,16 @@ void parser___ReduceAction687___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11686 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* ./parser//parser.nit:11687 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11688 */
-  fra.me.REG[2] = fra.me.REG[4];
   /* ./parser//parser.nit:11689 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11690 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction687____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11689);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11690);
   }
   REGB0 = ATTR_parser___ReduceAction687____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39599,7 +39590,7 @@ void parser___ReduceAction687___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos378]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11692;
+  fra.me.line = 11693;
   fra.me.meth = LOCATE_parser___ReduceAction687___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39607,7 +39598,7 @@ void parser___ReduceAction687___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11692 */
+  /* ./parser//parser.nit:11693 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction687____goto(fra.me.REG[1]) = REGB0;
@@ -39616,42 +39607,30 @@ void parser___ReduceAction687___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction688___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[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 = 11696;
+  fra.me.line = 11697;
   fra.me.meth = LOCATE_parser___ReduceAction688___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:11698 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11699 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11700 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11701 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11703 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11703);
-  }
-  /* ./parser//parser.nit:11705 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11706 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39666,16 +39645,16 @@ void parser___ReduceAction688___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11707 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:11704 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11709 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11710 */
+  /* ./parser//parser.nit:11706 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11707 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction688____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11710);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11707);
   }
   REGB0 = ATTR_parser___ReduceAction688____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39691,7 +39670,7 @@ void parser___ReduceAction688___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos379]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11713;
+  fra.me.line = 11710;
   fra.me.meth = LOCATE_parser___ReduceAction688___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39699,7 +39678,7 @@ void parser___ReduceAction688___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11713 */
+  /* ./parser//parser.nit:11710 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction688____goto(fra.me.REG[1]) = REGB0;
@@ -39708,30 +39687,42 @@ void parser___ReduceAction688___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction689___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[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 = 11717;
+  fra.me.line = 11714;
   fra.me.meth = LOCATE_parser___ReduceAction689___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:11719 */
+  /* ./parser//parser.nit:11716 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11720 */
+  /* ./parser//parser.nit:11717 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11718 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11719 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11721 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11721);
+  }
   /* ./parser//parser.nit:11723 */
+  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:11724 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39746,16 +39737,16 @@ void parser___ReduceAction689___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11724 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* ./parser//parser.nit:11725 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11726 */
-  fra.me.REG[2] = fra.me.REG[4];
   /* ./parser//parser.nit:11727 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11728 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction689____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11727);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11728);
   }
   REGB0 = ATTR_parser___ReduceAction689____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39771,7 +39762,7 @@ void parser___ReduceAction689___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos380]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11730;
+  fra.me.line = 11731;
   fra.me.meth = LOCATE_parser___ReduceAction689___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39779,7 +39770,7 @@ void parser___ReduceAction689___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11730 */
+  /* ./parser//parser.nit:11731 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction689____goto(fra.me.REG[1]) = REGB0;
@@ -39788,42 +39779,30 @@ void parser___ReduceAction689___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction690___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[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 = 11734;
+  fra.me.line = 11735;
   fra.me.meth = LOCATE_parser___ReduceAction690___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:11736 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11737 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11738 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11739 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11741 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11741);
-  }
-  /* ./parser//parser.nit:11743 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11744 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39838,16 +39817,16 @@ void parser___ReduceAction690___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11745 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:11742 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11747 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11748 */
+  /* ./parser//parser.nit:11744 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11745 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction690____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11748);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11745);
   }
   REGB0 = ATTR_parser___ReduceAction690____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39863,7 +39842,7 @@ void parser___ReduceAction690___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos381]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11751;
+  fra.me.line = 11748;
   fra.me.meth = LOCATE_parser___ReduceAction690___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39871,7 +39850,7 @@ void parser___ReduceAction690___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11751 */
+  /* ./parser//parser.nit:11748 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction690____goto(fra.me.REG[1]) = REGB0;
@@ -39879,31 +39858,43 @@ void parser___ReduceAction690___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos381] = 1;
   return;
 }
-void parser___ReduceAction693___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction691___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 = 11755;
-  fra.me.meth = LOCATE_parser___ReduceAction693___action;
+  fra.me.line = 11752;
+  fra.me.meth = LOCATE_parser___ReduceAction691___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:11757 */
+  /* ./parser//parser.nit:11754 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11758 */
+  /* ./parser//parser.nit:11755 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11756 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11757 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11759 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11759);
+  }
   /* ./parser//parser.nit:11761 */
+  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:11762 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39918,84 +39909,72 @@ void parser___ReduceAction693___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11762 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* ./parser//parser.nit:11763 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11764 */
-  fra.me.REG[2] = fra.me.REG[4];
   /* ./parser//parser.nit:11765 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction693____goto(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11766 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction691____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11765);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11766);
   }
-  REGB0 = ATTR_parser___ReduceAction693____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction691____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction693___init(val_t p0, val_t p1, int* init_table){
-  int itpos382 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction693].i;
+void parser___ReduceAction691___init(val_t p0, val_t p1, int* init_table){
+  int itpos382 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction691].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos382]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11768;
-  fra.me.meth = LOCATE_parser___ReduceAction693___init;
+  fra.me.line = 11769;
+  fra.me.meth = LOCATE_parser___ReduceAction691___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11768 */
+  /* ./parser//parser.nit:11769 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction693____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction691____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos382] = 1;
   return;
 }
 void parser___ReduceAction694___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  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 = 11772;
+  fra.me.line = 11773;
   fra.me.meth = LOCATE_parser___ReduceAction694___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:11774 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11775 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11776 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11777 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11779 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11779);
-  }
-  /* ./parser//parser.nit:11781 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11782 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40010,16 +39989,16 @@ void parser___ReduceAction694___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11783 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:11780 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11785 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11786 */
+  /* ./parser//parser.nit:11782 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11783 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction694____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11786);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11783);
   }
   REGB0 = ATTR_parser___ReduceAction694____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40035,7 +40014,7 @@ void parser___ReduceAction694___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos383]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11789;
+  fra.me.line = 11786;
   fra.me.meth = LOCATE_parser___ReduceAction694___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40043,7 +40022,7 @@ void parser___ReduceAction694___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11789 */
+  /* ./parser//parser.nit:11786 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction694____goto(fra.me.REG[1]) = REGB0;
@@ -40052,30 +40031,42 @@ void parser___ReduceAction694___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction695___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[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 = 11793;
+  fra.me.line = 11790;
   fra.me.meth = LOCATE_parser___ReduceAction695___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:11795 */
+  /* ./parser//parser.nit:11792 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11796 */
+  /* ./parser//parser.nit:11793 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11794 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11795 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11797 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11797);
+  }
   /* ./parser//parser.nit:11799 */
+  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:11800 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40090,16 +40081,16 @@ void parser___ReduceAction695___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11800 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* ./parser//parser.nit:11801 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11802 */
-  fra.me.REG[2] = fra.me.REG[4];
   /* ./parser//parser.nit:11803 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11804 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction695____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11803);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11804);
   }
   REGB0 = ATTR_parser___ReduceAction695____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40115,7 +40106,7 @@ void parser___ReduceAction695___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos384]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11806;
+  fra.me.line = 11807;
   fra.me.meth = LOCATE_parser___ReduceAction695___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40123,7 +40114,7 @@ void parser___ReduceAction695___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11806 */
+  /* ./parser//parser.nit:11807 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction695____goto(fra.me.REG[1]) = REGB0;
@@ -40132,42 +40123,30 @@ void parser___ReduceAction695___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction696___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[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 = 11810;
+  fra.me.line = 11811;
   fra.me.meth = LOCATE_parser___ReduceAction696___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:11812 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11813 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11814 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11815 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11817 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11817);
-  }
-  /* ./parser//parser.nit:11819 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11820 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40182,16 +40161,16 @@ void parser___ReduceAction696___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11821 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:11818 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11823 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11824 */
+  /* ./parser//parser.nit:11820 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11821 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction696____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11824);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11821);
   }
   REGB0 = ATTR_parser___ReduceAction696____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40207,7 +40186,7 @@ void parser___ReduceAction696___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos385]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11827;
+  fra.me.line = 11824;
   fra.me.meth = LOCATE_parser___ReduceAction696___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40215,7 +40194,7 @@ void parser___ReduceAction696___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11827 */
+  /* ./parser//parser.nit:11824 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction696____goto(fra.me.REG[1]) = REGB0;
@@ -40224,30 +40203,42 @@ void parser___ReduceAction696___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction697___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[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 = 11831;
+  fra.me.line = 11828;
   fra.me.meth = LOCATE_parser___ReduceAction697___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:11833 */
+  /* ./parser//parser.nit:11830 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11834 */
+  /* ./parser//parser.nit:11831 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11832 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11833 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11835 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11835);
+  }
   /* ./parser//parser.nit:11837 */
+  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:11838 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40262,16 +40253,16 @@ void parser___ReduceAction697___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11838 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* ./parser//parser.nit:11839 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11840 */
-  fra.me.REG[2] = fra.me.REG[4];
   /* ./parser//parser.nit:11841 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11842 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction697____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11841);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11842);
   }
   REGB0 = ATTR_parser___ReduceAction697____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40287,7 +40278,7 @@ void parser___ReduceAction697___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos386]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11844;
+  fra.me.line = 11845;
   fra.me.meth = LOCATE_parser___ReduceAction697___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40295,7 +40286,7 @@ void parser___ReduceAction697___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11844 */
+  /* ./parser//parser.nit:11845 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction697____goto(fra.me.REG[1]) = REGB0;
@@ -40304,42 +40295,30 @@ void parser___ReduceAction697___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction698___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[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 = 11848;
+  fra.me.line = 11849;
   fra.me.meth = LOCATE_parser___ReduceAction698___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:11850 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11851 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11852 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11853 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11855 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11855);
-  }
-  /* ./parser//parser.nit:11857 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11858 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40354,16 +40333,16 @@ void parser___ReduceAction698___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11859 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:11856 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11861 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11862 */
+  /* ./parser//parser.nit:11858 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11859 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction698____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11862);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11859);
   }
   REGB0 = ATTR_parser___ReduceAction698____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40379,7 +40358,7 @@ void parser___ReduceAction698___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos387]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11865;
+  fra.me.line = 11862;
   fra.me.meth = LOCATE_parser___ReduceAction698___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40387,7 +40366,7 @@ void parser___ReduceAction698___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11865 */
+  /* ./parser//parser.nit:11862 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction698____goto(fra.me.REG[1]) = REGB0;
@@ -40396,30 +40375,42 @@ void parser___ReduceAction698___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction699___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[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 = 11869;
+  fra.me.line = 11866;
   fra.me.meth = LOCATE_parser___ReduceAction699___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:11871 */
+  /* ./parser//parser.nit:11868 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11872 */
+  /* ./parser//parser.nit:11869 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11870 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11871 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11873 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11873);
+  }
   /* ./parser//parser.nit:11875 */
+  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:11876 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40434,16 +40425,16 @@ void parser___ReduceAction699___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11876 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* ./parser//parser.nit:11877 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11878 */
-  fra.me.REG[2] = fra.me.REG[4];
   /* ./parser//parser.nit:11879 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11880 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction699____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11879);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11880);
   }
   REGB0 = ATTR_parser___ReduceAction699____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40459,7 +40450,7 @@ void parser___ReduceAction699___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos388]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11882;
+  fra.me.line = 11883;
   fra.me.meth = LOCATE_parser___ReduceAction699___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40467,7 +40458,7 @@ void parser___ReduceAction699___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11882 */
+  /* ./parser//parser.nit:11883 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction699____goto(fra.me.REG[1]) = REGB0;
@@ -40476,42 +40467,30 @@ void parser___ReduceAction699___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction700___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[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 = 11886;
+  fra.me.line = 11887;
   fra.me.meth = LOCATE_parser___ReduceAction700___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:11888 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11889 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:11890 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:11891 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11893 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11893);
-  }
-  /* ./parser//parser.nit:11895 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11896 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40526,16 +40505,16 @@ void parser___ReduceAction700___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11897 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:11894 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11899 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11900 */
+  /* ./parser//parser.nit:11896 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11897 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction700____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11900);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11897);
   }
   REGB0 = ATTR_parser___ReduceAction700____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40551,7 +40530,7 @@ void parser___ReduceAction700___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos389]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11903;
+  fra.me.line = 11900;
   fra.me.meth = LOCATE_parser___ReduceAction700___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40559,7 +40538,7 @@ void parser___ReduceAction700___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11903 */
+  /* ./parser//parser.nit:11900 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction700____goto(fra.me.REG[1]) = REGB0;
@@ -40567,15 +40546,15 @@ void parser___ReduceAction700___init(val_t p0, val_t p1, int* init_table){
   init_table[itpos389] = 1;
   return;
 }
-void parser___ReduceAction702___action(val_t p0, val_t p1){
+void parser___ReduceAction701___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11907;
-  fra.me.meth = LOCATE_parser___ReduceAction702___action;
+  fra.me.line = 11904;
+  fra.me.meth = LOCATE_parser___ReduceAction701___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -40586,24 +40565,24 @@ void parser___ReduceAction702___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11909 */
+  /* ./parser//parser.nit:11906 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11910 */
+  /* ./parser//parser.nit:11907 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11911 */
+  /* ./parser//parser.nit:11908 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11912 */
+  /* ./parser//parser.nit:11909 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11914 */
+  /* ./parser//parser.nit:11911 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11914);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11911);
   }
-  /* ./parser//parser.nit:11916 */
+  /* ./parser//parser.nit:11913 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11917 */
+  /* ./parser//parser.nit:11914 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40618,56 +40597,56 @@ void parser___ReduceAction702___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11918 */
+    /* ./parser//parser.nit:11915 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11920 */
+  /* ./parser//parser.nit:11917 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11921 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction702____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11918 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction701____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11921);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11918);
   }
-  REGB0 = ATTR_parser___ReduceAction702____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction701____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction702___init(val_t p0, val_t p1, int* init_table){
-  int itpos390 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction702].i;
+void parser___ReduceAction701___init(val_t p0, val_t p1, int* init_table){
+  int itpos390 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction701].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos390]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11924;
-  fra.me.meth = LOCATE_parser___ReduceAction702___init;
+  fra.me.line = 11921;
+  fra.me.meth = LOCATE_parser___ReduceAction701___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11924 */
+  /* ./parser//parser.nit:11921 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction702____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction701____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos390] = 1;
   return;
 }
-void parser___ReduceAction704___action(val_t p0, val_t p1){
+void parser___ReduceAction703___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11928;
-  fra.me.meth = LOCATE_parser___ReduceAction704___action;
+  fra.me.line = 11925;
+  fra.me.meth = LOCATE_parser___ReduceAction703___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -40678,24 +40657,24 @@ void parser___ReduceAction704___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11930 */
+  /* ./parser//parser.nit:11927 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11931 */
+  /* ./parser//parser.nit:11928 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11932 */
+  /* ./parser//parser.nit:11929 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11933 */
+  /* ./parser//parser.nit:11930 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11935 */
+  /* ./parser//parser.nit:11932 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11935);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11932);
   }
-  /* ./parser//parser.nit:11937 */
+  /* ./parser//parser.nit:11934 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11938 */
+  /* ./parser//parser.nit:11935 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40710,55 +40689,56 @@ void parser___ReduceAction704___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11939 */
+    /* ./parser//parser.nit:11936 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11941 */
+  /* ./parser//parser.nit:11938 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11942 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction704____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11939 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction703____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11942);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11939);
   }
-  REGB0 = ATTR_parser___ReduceAction704____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction703____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction704___init(val_t p0, val_t p1, int* init_table){
-  int itpos391 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction704].i;
+void parser___ReduceAction703___init(val_t p0, val_t p1, int* init_table){
+  int itpos391 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction703].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos391]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11945;
-  fra.me.meth = LOCATE_parser___ReduceAction704___init;
+  fra.me.line = 11942;
+  fra.me.meth = LOCATE_parser___ReduceAction703___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11945 */
+  /* ./parser//parser.nit:11942 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction704____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction703____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos391] = 1;
   return;
 }
-void parser___ReduceAction706___action(val_t p0, val_t p1){
+void parser___ReduceAction705___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 = 11949;
-  fra.me.meth = LOCATE_parser___ReduceAction706___action;
+  fra.me.line = 11946;
+  fra.me.meth = LOCATE_parser___ReduceAction705___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -40769,79 +40749,87 @@ void parser___ReduceAction706___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11951 */
+  /* ./parser//parser.nit:11948 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11952 */
+  /* ./parser//parser.nit:11949 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11953 */
+  /* ./parser//parser.nit:11950 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11954 */
+  /* ./parser//parser.nit:11951 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11956 */
+  /* ./parser//parser.nit:11953 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11956);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11953);
   }
-  /* ./parser//parser.nit:11958 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit: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:11956 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11958);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:11957 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
   /* ./parser//parser.nit:11959 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11960 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:11961 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11962 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction706____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11960 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction705____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11962);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11960);
   }
-  REGB0 = ATTR_parser___ReduceAction706____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction705____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction706___init(val_t p0, val_t p1, int* init_table){
-  int itpos392 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction706].i;
+void parser___ReduceAction705___init(val_t p0, val_t p1, int* init_table){
+  int itpos392 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction705].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos392]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11965;
-  fra.me.meth = LOCATE_parser___ReduceAction706___init;
+  fra.me.line = 11963;
+  fra.me.meth = LOCATE_parser___ReduceAction705___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11965 */
+  /* ./parser//parser.nit:11963 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction706____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction705____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos392] = 1;
   return;
 }
-void parser___ReduceAction710___action(val_t p0, val_t p1){
+void parser___ReduceAction707___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11969;
-  fra.me.meth = LOCATE_parser___ReduceAction710___action;
+  fra.me.line = 11967;
+  fra.me.meth = LOCATE_parser___ReduceAction707___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -40852,104 +40840,107 @@ void parser___ReduceAction710___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11971 */
+  /* ./parser//parser.nit:11969 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11972 */
+  /* ./parser//parser.nit:11970 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11973 */
+  /* ./parser//parser.nit:11971 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11974 */
+  /* ./parser//parser.nit:11972 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11976 */
+  /* ./parser//parser.nit:11974 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11974);
+  }
+  /* ./parser//parser.nit:11976 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
     nit_abort("Assert failed", NULL, LOCATE_parser, 11976);
   }
-  /* ./parser//parser.nit:11978 */
+  /* ./parser//parser.nit:11977 */
   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:11978 */
+  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:11979 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11980 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  /* ./parser//parser.nit:11982 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11983 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction710____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11980 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction707____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11983);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11980);
   }
-  REGB0 = ATTR_parser___ReduceAction710____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction707____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction710___init(val_t p0, val_t p1, int* init_table){
-  int itpos393 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction710].i;
+void parser___ReduceAction707___init(val_t p0, val_t p1, int* init_table){
+  int itpos393 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction707].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos393]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11986;
-  fra.me.meth = LOCATE_parser___ReduceAction710___init;
+  fra.me.line = 11983;
+  fra.me.meth = LOCATE_parser___ReduceAction707___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11986 */
+  /* ./parser//parser.nit:11983 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction710____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction707____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos393] = 1;
   return;
 }
 void parser___ReduceAction711___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  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 = 11990;
+  fra.me.line = 11987;
   fra.me.meth = LOCATE_parser___ReduceAction711___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:11992 */
+  /* ./parser//parser.nit:11989 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11993 */
+  /* ./parser//parser.nit:11990 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11991 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11992 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:11994 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11994);
+  }
   /* ./parser//parser.nit:11996 */
+  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:11997 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40964,16 +40955,16 @@ void parser___ReduceAction711___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11997 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* ./parser//parser.nit:11998 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11999 */
-  fra.me.REG[2] = fra.me.REG[4];
   /* ./parser//parser.nit:12000 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:12001 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction711____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12000);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12001);
   }
   REGB0 = ATTR_parser___ReduceAction711____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40989,7 +40980,7 @@ void parser___ReduceAction711___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos394]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12003;
+  fra.me.line = 12004;
   fra.me.meth = LOCATE_parser___ReduceAction711___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40997,7 +40988,7 @@ void parser___ReduceAction711___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:12003 */
+  /* ./parser//parser.nit:12004 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction711____goto(fra.me.REG[1]) = REGB0;
@@ -41006,42 +40997,30 @@ void parser___ReduceAction711___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction712___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[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 = 12007;
+  fra.me.line = 12008;
   fra.me.meth = LOCATE_parser___ReduceAction712___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:12009 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:12010 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:12011 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:12012 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  fra.me.REG[4] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:12014 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12014);
-  }
-  /* ./parser//parser.nit:12016 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:12017 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41056,16 +41035,16 @@ void parser___ReduceAction712___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:12018 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:12015 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:12020 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:12021 */
+  /* ./parser//parser.nit:12017 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:12018 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction712____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12021);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12018);
   }
   REGB0 = ATTR_parser___ReduceAction712____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41081,7 +41060,7 @@ void parser___ReduceAction712___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos395]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12024;
+  fra.me.line = 12021;
   fra.me.meth = LOCATE_parser___ReduceAction712___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -41089,7 +41068,7 @@ void parser___ReduceAction712___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:12024 */
+  /* ./parser//parser.nit:12021 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction712____goto(fra.me.REG[1]) = REGB0;
@@ -41098,30 +41077,42 @@ void parser___ReduceAction712___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction713___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[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 = 12028;
+  fra.me.line = 12025;
   fra.me.meth = LOCATE_parser___ReduceAction713___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:12030 */
+  /* ./parser//parser.nit:12027 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:12031 */
+  /* ./parser//parser.nit:12028 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:12029 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:12030 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
   /* ./parser//parser.nit:12032 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12032);
+  }
   /* ./parser//parser.nit:12034 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
+  fra.me.REG[5] = fra.me.REG[4];
+  /* ./parser//parser.nit:12035 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41136,16 +41127,16 @@ void parser___ReduceAction713___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:12035 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* ./parser//parser.nit:12036 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:12037 */
-  fra.me.REG[2] = fra.me.REG[4];
   /* ./parser//parser.nit:12038 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:12039 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction713____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12038);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12039);
   }
   REGB0 = ATTR_parser___ReduceAction713____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41161,7 +41152,7 @@ void parser___ReduceAction713___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos396]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12041;
+  fra.me.line = 12042;
   fra.me.meth = LOCATE_parser___ReduceAction713___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -41169,7 +41160,7 @@ void parser___ReduceAction713___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:12041 */
+  /* ./parser//parser.nit:12042 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction713____goto(fra.me.REG[1]) = REGB0;
@@ -41178,15 +41169,95 @@ void parser___ReduceAction713___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction714___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[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 = 12045;
+  fra.me.line = 12046;
   fra.me.meth = LOCATE_parser___ReduceAction714___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:12048 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:12049 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:12050 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:12052 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:12053 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:12055 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:12056 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction714____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12056);
+  }
+  REGB0 = ATTR_parser___ReduceAction714____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction714___init(val_t p0, val_t p1, int* init_table){
+  int itpos397 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction714].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos397]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 12059;
+  fra.me.meth = LOCATE_parser___ReduceAction714___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit:12059 */
+  fra.me.REG[1] = fra.me.REG[0];
+  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction714____goto(fra.me.REG[1]) = REGB0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos397] = 1;
+  return;
+}
+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 = 12063;
+  fra.me.meth = LOCATE_parser___ReduceAction715___action;
+  fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -41196,24 +41267,24 @@ void parser___ReduceAction714___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:12047 */
+  /* ./parser//parser.nit:12065 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:12048 */
+  /* ./parser//parser.nit:12066 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:12049 */
+  /* ./parser//parser.nit:12067 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:12050 */
+  /* ./parser//parser.nit:12068 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:12052 */
+  /* ./parser//parser.nit:12070 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12052);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12070);
   }
-  /* ./parser//parser.nit:12054 */
+  /* ./parser//parser.nit:12072 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:12055 */
+  /* ./parser//parser.nit:12073 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41228,44 +41299,44 @@ void parser___ReduceAction714___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:12056 */
+    /* ./parser//parser.nit:12074 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:12058 */
+  /* ./parser//parser.nit:12076 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:12059 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction714____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:12077 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction715____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12059);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12077);
   }
-  REGB0 = ATTR_parser___ReduceAction714____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction715____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction714___init(val_t p0, val_t p1, int* init_table){
-  int itpos397 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction714].i;
+void parser___ReduceAction715___init(val_t p0, val_t p1, int* init_table){
+  int itpos398 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction715].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos397]) return;
+  if (init_table[itpos398]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12062;
-  fra.me.meth = LOCATE_parser___ReduceAction714___init;
+  fra.me.line = 12080;
+  fra.me.meth = LOCATE_parser___ReduceAction715___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:12062 */
+  /* ./parser//parser.nit:12080 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction714____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction715____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos397] = 1;
+  init_table[itpos398] = 1;
   return;
 }