ni: makes pointer default super-class of all extern classes
[nit.git] / c_src / parser._sep.c
index e34f157..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(692);
+  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]);
@@ -1493,77 +1493,77 @@ 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:292 */
-  REGB0 = TAG_Int(13);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction139_parser___ReduceAction139___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:293 */
-  REGB0 = TAG_Int(13);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction140_parser___ReduceAction140___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:294 */
-  REGB0 = TAG_Int(14);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction141_parser___ReduceAction141___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:295 */
-  REGB0 = TAG_Int(14);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction142_parser___ReduceAction142___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:296 */
-  REGB0 = TAG_Int(15);
+  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]);
   /* ./parser//parser.nit:297 */
-  REGB0 = TAG_Int(15);
+  REGB0 = TAG_Int(13);
   fra.me.REG[2] = NEW_ReduceAction144_parser___ReduceAction144___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:298 */
-  REGB0 = TAG_Int(16);
+  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]);
   /* ./parser//parser.nit:299 */
-  REGB0 = TAG_Int(16);
+  REGB0 = TAG_Int(14);
   fra.me.REG[2] = NEW_ReduceAction146_parser___ReduceAction146___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:300 */
-  REGB0 = TAG_Int(16);
+  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]);
   /* ./parser//parser.nit:301 */
-  REGB0 = TAG_Int(16);
+  REGB0 = TAG_Int(15);
   fra.me.REG[2] = NEW_ReduceAction148_parser___ReduceAction148___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:302 */
-  REGB0 = TAG_Int(17);
+  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]);
   /* ./parser//parser.nit:303 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(16);
   fra.me.REG[2] = NEW_ReduceAction150_parser___ReduceAction150___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:304 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(16);
   fra.me.REG[2] = NEW_ReduceAction151_parser___ReduceAction151___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:305 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(16);
   fra.me.REG[2] = NEW_ReduceAction152_parser___ReduceAction152___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:306 */
-  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]);
@@ -1633,27 +1633,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:320 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction167_parser___ReduceAction167___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:321 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction168_parser___ReduceAction168___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:322 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction169_parser___ReduceAction169___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:323 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction170_parser___ReduceAction170___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:324 */
-  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]);
@@ -1673,87 +1673,87 @@ 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:328 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction175_parser___ReduceAction175___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:329 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction176_parser___ReduceAction176___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:330 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction177_parser___ReduceAction177___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:331 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction178_parser___ReduceAction178___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:332 */
-  REGB0 = TAG_Int(20);
+  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]);
   /* ./parser//parser.nit:333 */
-  REGB0 = TAG_Int(20);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction180_parser___ReduceAction180___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:334 */
-  REGB0 = TAG_Int(20);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction181_parser___ReduceAction181___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:335 */
-  REGB0 = TAG_Int(21);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction182_parser___ReduceAction182___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:336 */
-  REGB0 = TAG_Int(22);
+  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]);
   /* ./parser//parser.nit:337 */
-  REGB0 = TAG_Int(22);
+  REGB0 = TAG_Int(20);
   fra.me.REG[2] = NEW_ReduceAction184_parser___ReduceAction184___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:338 */
-  REGB0 = TAG_Int(22);
+  REGB0 = TAG_Int(20);
   fra.me.REG[2] = NEW_ReduceAction185_parser___ReduceAction185___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:339 */
-  REGB0 = TAG_Int(23);
+  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(24);
+  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]);
   /* ./parser//parser.nit:341 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(22);
   fra.me.REG[2] = NEW_ReduceAction188_parser___ReduceAction188___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:342 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(22);
   fra.me.REG[2] = NEW_ReduceAction189_parser___ReduceAction189___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:343 */
-  REGB0 = TAG_Int(24);
+  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]);
@@ -1763,292 +1763,292 @@ 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:346 */
-  REGB0 = TAG_Int(25);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction193_parser___ReduceAction193___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:347 */
-  REGB0 = TAG_Int(26);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction194_parser___ReduceAction194___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:348 */
-  REGB0 = TAG_Int(26);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction195_parser___ReduceAction195___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:349 */
-  REGB0 = TAG_Int(26);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction196_parser___ReduceAction196___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:350 */
-  REGB0 = TAG_Int(26);
+  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(27);
+  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]);
   /* ./parser//parser.nit:352 */
-  REGB0 = TAG_Int(27);
+  REGB0 = TAG_Int(26);
   fra.me.REG[2] = NEW_ReduceAction199_parser___ReduceAction199___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:353 */
-  REGB0 = TAG_Int(28);
+  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(29);
-  fra.me.REG[2] = NEW_ReduceAction200_parser___ReduceAction200___init(REGB0);
+  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(30);
+  REGB0 = TAG_Int(28);
   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(30);
-  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction203___init(REGB0);
+  REGB0 = TAG_Int(28);
+  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(30);
+  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]);
   /* ./parser//parser.nit:358 */
-  REGB0 = TAG_Int(30);
+  REGB0 = TAG_Int(29);
   fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:359 */
-  REGB0 = TAG_Int(31);
+  REGB0 = TAG_Int(29);
   fra.me.REG[2] = NEW_ReduceAction206_parser___ReduceAction206___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:360 */
-  REGB0 = TAG_Int(31);
+  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]);
   /* ./parser//parser.nit:361 */
-  REGB0 = TAG_Int(32);
+  REGB0 = TAG_Int(30);
   fra.me.REG[2] = NEW_ReduceAction208_parser___ReduceAction208___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:362 */
-  REGB0 = TAG_Int(32);
+  REGB0 = TAG_Int(30);
   fra.me.REG[2] = NEW_ReduceAction209_parser___ReduceAction209___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:363 */
-  REGB0 = TAG_Int(33);
+  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]);
   /* ./parser//parser.nit:364 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(31);
+  fra.me.REG[2] = NEW_ReduceAction211_parser___ReduceAction211___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:365 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(31);
+  fra.me.REG[2] = NEW_ReduceAction212_parser___ReduceAction212___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:366 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(31);
   fra.me.REG[2] = NEW_ReduceAction213_parser___ReduceAction213___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:367 */
-  REGB0 = TAG_Int(34);
+  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]);
   /* ./parser//parser.nit:368 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(32);
   fra.me.REG[2] = NEW_ReduceAction215_parser___ReduceAction215___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:369 */
-  REGB0 = TAG_Int(34);
+  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);
+  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(34);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
+  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 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(35);
   fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction219___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:373 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(35);
   fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction220___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:374 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(35);
   fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:375 */
-  REGB0 = TAG_Int(34);
+  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]);
   /* ./parser//parser.nit:376 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(36);
   fra.me.REG[2] = NEW_ReduceAction223_parser___ReduceAction223___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:377 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  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]);
   /* ./parser//parser.nit:378 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(37);
+  fra.me.REG[2] = NEW_ReduceAction225_parser___ReduceAction225___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:379 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  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(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___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(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(39);
+  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(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(39);
+  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 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:384 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction231___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:385 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:386 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:387 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:388 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:389 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:390 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:391 */
-  REGB0 = TAG_Int(35);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction238___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:392 */
-  REGB0 = TAG_Int(36);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction239_parser___ReduceAction239___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:393 */
-  REGB0 = TAG_Int(36);
+  REGB0 = TAG_Int(39);
   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(37);
-  fra.me.REG[2] = NEW_ReduceAction241_parser___ReduceAction241___init(REGB0);
+  REGB0 = TAG_Int(39);
+  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(37);
-  fra.me.REG[2] = NEW_ReduceAction242_parser___ReduceAction242___init(REGB0);
+  REGB0 = TAG_Int(39);
+  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(37);
-  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction243___init(REGB0);
+  REGB0 = TAG_Int(39);
+  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(37);
-  fra.me.REG[2] = NEW_ReduceAction244_parser___ReduceAction244___init(REGB0);
+  REGB0 = TAG_Int(39);
+  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(37);
-  fra.me.REG[2] = NEW_ReduceAction245_parser___ReduceAction245___init(REGB0);
+  REGB0 = TAG_Int(39);
+  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(37);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
+  REGB0 = TAG_Int(39);
+  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 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction247___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:401 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:402 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:403 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2063,17 +2063,17 @@ 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:406 */
-  REGB0 = TAG_Int(40);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:407 */
-  REGB0 = TAG_Int(41);
+  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]);
@@ -2118,78 +2118,78 @@ 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:417 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(43);
   fra.me.REG[2] = NEW_ReduceAction264_parser___ReduceAction264___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:418 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(43);
   fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction265___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:419 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(43);
   fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction266___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:420 */
-  REGB0 = TAG_Int(42);
+  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]);
   /* ./parser//parser.nit:421 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(44);
   fra.me.REG[2] = NEW_ReduceAction268_parser___ReduceAction268___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:422 */
-  REGB0 = TAG_Int(43);
+  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(44);
+  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]);
   /* ./parser//parser.nit:424 */
-  REGB0 = TAG_Int(44);
+  REGB0 = TAG_Int(46);
   fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction271___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:425 */
-  REGB0 = TAG_Int(45);
+  REGB0 = TAG_Int(46);
   fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction272___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:426 */
-  REGB0 = TAG_Int(45);
+  REGB0 = TAG_Int(46);
   fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction273___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:427 */
-  REGB0 = TAG_Int(45);
+  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]);
   /* ./parser//parser.nit:428 */
-  REGB0 = TAG_Int(45);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction275___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:429 */
-  REGB0 = TAG_Int(45);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction276___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:430 */
-  REGB0 = TAG_Int(46);
-  fra.me.REG[2] = NEW_ReduceAction210_parser___ReduceAction210___init(REGB0);
+  REGB0 = TAG_Int(47);
+  fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction277___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:431 */
-  REGB0 = TAG_Int(46);
-  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___init(REGB0);
+  REGB0 = TAG_Int(47);
+  fra.me.REG[2] = NEW_ReduceAction278_parser___ReduceAction278___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:432 */
@@ -2203,127 +2203,127 @@ 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:434 */
-  REGB0 = TAG_Int(48);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction281___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:435 */
-  REGB0 = TAG_Int(48);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction282___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:436 */
-  REGB0 = TAG_Int(49);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction283___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:437 */
-  REGB0 = TAG_Int(49);
+  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]);
   /* ./parser//parser.nit:438 */
-  REGB0 = TAG_Int(50);
+  REGB0 = TAG_Int(48);
   fra.me.REG[2] = NEW_ReduceAction285_parser___ReduceAction285___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:439 */
-  REGB0 = TAG_Int(50);
+  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]);
   /* ./parser//parser.nit:440 */
-  REGB0 = TAG_Int(50);
+  REGB0 = TAG_Int(49);
   fra.me.REG[2] = NEW_ReduceAction287_parser___ReduceAction287___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:441 */
-  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]);
   /* ./parser//parser.nit:442 */
-  REGB0 = TAG_Int(51);
+  REGB0 = TAG_Int(50);
   fra.me.REG[2] = NEW_ReduceAction289_parser___ReduceAction289___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:443 */
-  REGB0 = TAG_Int(52);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(50);
+  fra.me.REG[2] = NEW_ReduceAction290_parser___ReduceAction290___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:444 */
-  REGB0 = TAG_Int(52);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  REGB0 = TAG_Int(50);
+  fra.me.REG[2] = NEW_ReduceAction291_parser___ReduceAction291___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:445 */
-  REGB0 = TAG_Int(52);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  REGB0 = TAG_Int(50);
+  fra.me.REG[2] = NEW_ReduceAction292_parser___ReduceAction292___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:446 */
-  REGB0 = TAG_Int(52);
+  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(53);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(51);
+  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(53);
-  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 */
-  REGB0 = TAG_Int(54);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(52);
+  fra.me.REG[2] = NEW_ReduceAction296_parser___ReduceAction296___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:450 */
-  REGB0 = TAG_Int(54);
+  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]);
   /* ./parser//parser.nit:451 */
-  REGB0 = TAG_Int(54);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction298___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:452 */
-  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]);
   /* ./parser//parser.nit:453 */
-  REGB0 = TAG_Int(55);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(54);
+  fra.me.REG[2] = NEW_ReduceAction300_parser___ReduceAction300___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:454 */
-  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]);
   /* ./parser//parser.nit:455 */
-  REGB0 = TAG_Int(56);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(55);
+  fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction302___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:456 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(55);
   fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction303___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:457 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(55);
   fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction304___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:458 */
-  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]);
@@ -2333,107 +2333,107 @@ 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:460 */
-  REGB0 = TAG_Int(56);
-  fra.me.REG[2] = NEW_ReduceAction307_parser___ReduceAction307___init(REGB0);
+  REGB0 = TAG_Int(57);
+  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 */
-  REGB0 = TAG_Int(56);
-  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction308___init(REGB0);
+  REGB0 = TAG_Int(57);
+  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:462 */
-  REGB0 = TAG_Int(56);
-  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction309___init(REGB0);
+  REGB0 = TAG_Int(57);
+  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(56);
+  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(56);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
+  REGB0 = TAG_Int(58);
+  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(56);
+  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(56);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
+  REGB0 = TAG_Int(59);
+  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 */
-  REGB0 = TAG_Int(57);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(59);
+  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction314___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:468 */
-  REGB0 = TAG_Int(57);
+  REGB0 = TAG_Int(59);
   fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:469 */
-  REGB0 = TAG_Int(57);
+  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(58);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(60);
+  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(58);
+  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(58);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
+  REGB0 = TAG_Int(61);
+  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 */
-  REGB0 = TAG_Int(58);
+  REGB0 = TAG_Int(61);
   fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:474 */
-  REGB0 = TAG_Int(59);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction321___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:475 */
-  REGB0 = TAG_Int(59);
+  REGB0 = TAG_Int(61);
   fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:476 */
-  REGB0 = TAG_Int(59);
+  REGB0 = TAG_Int(61);
   fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:477 */
-  REGB0 = TAG_Int(60);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction324_parser___ReduceAction324___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:478 */
-  REGB0 = TAG_Int(60);
+  REGB0 = TAG_Int(61);
   fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:479 */
-  REGB0 = TAG_Int(60);
+  REGB0 = TAG_Int(61);
   fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:480 */
-  REGB0 = TAG_Int(60);
+  REGB0 = TAG_Int(61);
   fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2449,142 +2449,142 @@ 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:483 */
   REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
+  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(61);
-  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction231___init(REGB0);
+  REGB0 = TAG_Int(62);
+  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 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction332___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:486 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___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(61);
-  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
+  REGB0 = TAG_Int(63);
+  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 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init(REGB0);
+  REGB0 = TAG_Int(63);
+  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction335___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:489 */
-  REGB0 = TAG_Int(61);
+  REGB0 = TAG_Int(63);
   fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction336___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:490 */
-  REGB0 = TAG_Int(61);
+  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(61);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction338___init(REGB0);
+  REGB0 = TAG_Int(64);
+  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 */
-  REGB0 = TAG_Int(61);
+  REGB0 = TAG_Int(64);
   fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction339___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:493 */
-  REGB0 = TAG_Int(61);
+  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(61);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
+  REGB0 = TAG_Int(65);
+  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 */
-  REGB0 = TAG_Int(61);
+  REGB0 = TAG_Int(65);
   fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:496 */
-  REGB0 = TAG_Int(61);
+  REGB0 = TAG_Int(65);
   fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:497 */
-  REGB0 = TAG_Int(61);
+  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]);
   /* ./parser//parser.nit:498 */
-  REGB0 = TAG_Int(61);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:499 */
-  REGB0 = TAG_Int(61);
+  REGB0 = TAG_Int(66);
   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 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction347___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction247___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:501 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction348___init(REGB0);
+  REGB0 = TAG_Int(66);
+  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 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:503 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction252___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:504 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction351___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:505 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init(REGB0);
+  REGB0 = TAG_Int(66);
+  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 */
-  REGB0 = TAG_Int(62);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction353___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:507 */
-  REGB0 = TAG_Int(62);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction354___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:508 */
-  REGB0 = TAG_Int(63);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction355___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:509 */
-  REGB0 = TAG_Int(64);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction356___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:510 */
-  REGB0 = TAG_Int(65);
-  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction355___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction357___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:511 */
@@ -2593,1673 +2593,1788 @@ 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:512 */
-  REGB0 = TAG_Int(67);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction359___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:513 */
-  REGB0 = TAG_Int(68);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:514 */
-  REGB0 = TAG_Int(68);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:515 */
-  REGB0 = TAG_Int(68);
-  fra.me.REG[2] = NEW_ReduceAction181_parser___ReduceAction181___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction362___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:516 */
-  REGB0 = TAG_Int(68);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction363___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:517 */
-  REGB0 = TAG_Int(69);
-  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction364___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:518 */
-  REGB0 = TAG_Int(69);
-  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
+  REGB0 = TAG_Int(66);
+  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(69);
-  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction366___init(REGB0);
+  REGB0 = TAG_Int(66);
+  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(69);
-  fra.me.REG[2] = NEW_ReduceAction181_parser___ReduceAction181___init(REGB0);
+  REGB0 = TAG_Int(66);
+  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 */
-  REGB0 = TAG_Int(69);
-  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction363___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction368___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:522 */
-  REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
+  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]);
   /* ./parser//parser.nit:523 */
-  REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction370___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:524 */
-  REGB0 = TAG_Int(71);
+  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(72);
+  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(72);
+  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(73);
-  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(73);
+  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(74);
+  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]);
   /* ./parser//parser.nit:530 */
-  REGB0 = TAG_Int(74);
+  REGB0 = TAG_Int(73);
   fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction377___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:531 */
-  REGB0 = TAG_Int(74);
+  REGB0 = TAG_Int(73);
   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(75);
-  fra.me.REG[2] = NEW_ReduceAction379_parser___ReduceAction379___init(REGB0);
+  REGB0 = TAG_Int(73);
+  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(76);
+  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 */
-  REGB0 = TAG_Int(77);
-  fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction381___init(REGB0);
+  REGB0 = TAG_Int(74);
+  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction377___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:535 */
-  REGB0 = TAG_Int(77);
-  fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction381___init(REGB0);
+  REGB0 = TAG_Int(74);
+  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(78);
+  REGB0 = TAG_Int(74);
   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(78);
-  fra.me.REG[2] = NEW_ReduceAction384_parser___ReduceAction384___init(REGB0);
+  REGB0 = TAG_Int(74);
+  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(78);
-  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___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 */
-  REGB0 = TAG_Int(79);
-  fra.me.REG[2] = NEW_ReduceAction386_parser___ReduceAction386___init(REGB0);
+  REGB0 = TAG_Int(75);
+  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction377___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:540 */
-  REGB0 = TAG_Int(79);
-  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(80);
+  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]);
   /* ./parser//parser.nit:542 */
-  REGB0 = TAG_Int(80);
+  REGB0 = TAG_Int(77);
   fra.me.REG[2] = NEW_ReduceAction389_parser___ReduceAction389___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:543 */
-  REGB0 = TAG_Int(80);
-  fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction381___init(REGB0);
+  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]);
   /* ./parser//parser.nit:544 */
-  REGB0 = TAG_Int(81);
-  fra.me.REG[2] = NEW_ReduceAction66_parser___ReduceAction66___init(REGB0);
+  REGB0 = TAG_Int(78);
+  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction391___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:545 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction67___init(REGB0);
+  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]);
   /* ./parser//parser.nit:546 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction68_parser___ReduceAction68___init(REGB0);
+  REGB0 = TAG_Int(79);
+  fra.me.REG[2] = NEW_ReduceAction393_parser___ReduceAction393___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:547 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction69_parser___ReduceAction69___init(REGB0);
+  REGB0 = TAG_Int(79);
+  fra.me.REG[2] = NEW_ReduceAction394_parser___ReduceAction394___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:548 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction70_parser___ReduceAction70___init(REGB0);
+  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(82);
-  fra.me.REG[2] = NEW_ReduceAction71_parser___ReduceAction71___init(REGB0);
+  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);
-  fra.me.REG[2] = NEW_ReduceAction72_parser___ReduceAction72___init(REGB0);
+  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_ReduceAction77_parser___ReduceAction77___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(82);
-  fra.me.REG[2] = NEW_ReduceAction78_parser___ReduceAction78___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:553 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction79_parser___ReduceAction79___init(REGB0);
+  REGB0 = TAG_Int(83);
+  fra.me.REG[2] = NEW_ReduceAction400_parser___ReduceAction400___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:554 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction80_parser___ReduceAction80___init(REGB0);
+  REGB0 = TAG_Int(83);
+  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(83);
-  fra.me.REG[2] = NEW_ReduceAction167_parser___ReduceAction167___init(REGB0);
+  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 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction168_parser___ReduceAction168___init(REGB0);
+  REGB0 = TAG_Int(84);
+  fra.me.REG[2] = NEW_ReduceAction403_parser___ReduceAction403___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:557 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction169_parser___ReduceAction169___init(REGB0);
+  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]);
   /* ./parser//parser.nit:558 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction170_parser___ReduceAction170___init(REGB0);
+  REGB0 = TAG_Int(85);
+  fra.me.REG[2] = NEW_ReduceAction405_parser___ReduceAction405___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:559 */
-  REGB0 = TAG_Int(84);
-  fra.me.REG[2] = NEW_ReduceAction194_parser___ReduceAction194___init(REGB0);
+  REGB0 = TAG_Int(85);
+  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(84);
-  fra.me.REG[2] = NEW_ReduceAction195_parser___ReduceAction195___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(85);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  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]);
   /* ./parser//parser.nit:562 */
-  REGB0 = TAG_Int(85);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction68_parser___ReduceAction68___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:563 */
-  REGB0 = TAG_Int(85);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction69_parser___ReduceAction69___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:564 */
-  REGB0 = TAG_Int(86);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction70_parser___ReduceAction70___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:565 */
-  REGB0 = TAG_Int(86);
-  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction295___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction71_parser___ReduceAction71___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:566 */
   REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction72_parser___ReduceAction72___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:567 */
   REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction297___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 */
   REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction298___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction78_parser___ReduceAction78___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:569 */
   REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction299___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction79_parser___ReduceAction79___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:570 */
-  REGB0 = TAG_Int(88);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction80_parser___ReduceAction80___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:571 */
-  REGB0 = TAG_Int(88);
-  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction301___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction81_parser___ReduceAction81___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:572 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction82_parser___ReduceAction82___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:573 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction303___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction83_parser___ReduceAction83___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:574 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction304___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction84_parser___ReduceAction84___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:575 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction305___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 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction306___init(REGB0);
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction172_parser___ReduceAction172___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:577 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction307_parser___ReduceAction307___init(REGB0);
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction173_parser___ReduceAction173___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:578 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction308___init(REGB0);
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction174_parser___ReduceAction174___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:579 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction309___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 */
   REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction310___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction211_parser___ReduceAction211___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:581 */
   REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
+  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(89);
-  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction312___init(REGB0);
+  REGB0 = TAG_Int(90);
+  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 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:584 */
   REGB0 = TAG_Int(90);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___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:585 */
-  REGB0 = TAG_Int(90);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
+  REGB0 = TAG_Int(91);
+  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(90);
-  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction316___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(91);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(92);
+  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 */
-  REGB0 = TAG_Int(91);
-  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction318___init(REGB0);
+  REGB0 = TAG_Int(92);
+  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction314___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:589 */
-  REGB0 = TAG_Int(91);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
+  REGB0 = TAG_Int(92);
+  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:590 */
-  REGB0 = TAG_Int(91);
-  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___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(92);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(93);
+  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(92);
-  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___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(92);
-  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
+  REGB0 = TAG_Int(94);
+  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 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:595 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction321___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:596 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:597 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:598 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction324_parser___ReduceAction324___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:599 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:600 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:601 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction231___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:602 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:603 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:604 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
+  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(94);
-  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init(REGB0);
+  REGB0 = TAG_Int(95);
+  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 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction337___init(REGB0);
+  REGB0 = TAG_Int(95);
+  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction332___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:607 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___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(94);
-  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
+  REGB0 = TAG_Int(96);
+  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 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction335___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:610 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init(REGB0);
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction336___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:611 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___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(94);
-  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction346___init(REGB0);
+  REGB0 = TAG_Int(97);
+  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 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction347___init(REGB0);
+  REGB0 = TAG_Int(97);
+  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction339___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:614 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction348___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(94);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(98);
+  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 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:617 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction351___init(REGB0);
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:618 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init(REGB0);
+  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]);
   /* ./parser//parser.nit:619 */
-  REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:620 */
-  REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction203___init(REGB0);
+  REGB0 = TAG_Int(99);
+  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 */
-  REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction204___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction247___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:622 */
-  REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(99);
+  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 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:624 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction252___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:625 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction213_parser___ReduceAction213___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:626 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction214_parser___ReduceAction214___init(REGB0);
+  REGB0 = TAG_Int(99);
+  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(96);
-  fra.me.REG[2] = NEW_ReduceAction215_parser___ReduceAction215___init(REGB0);
+  REGB0 = TAG_Int(99);
+  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 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction216_parser___ReduceAction216___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction358___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:629 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction217_parser___ReduceAction217___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction359___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:630 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:631 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction219___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:632 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction220___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction362___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:633 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction363___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:634 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction364___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:635 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction223_parser___ReduceAction223___init(REGB0);
+  REGB0 = TAG_Int(99);
+  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(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(99);
+  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(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(99);
+  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 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction368___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:639 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___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 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction219___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:641 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction220___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:642 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:643 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction231___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(96);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  REGB0 = TAG_Int(101);
+  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(96);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  REGB0 = TAG_Int(101);
+  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 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:647 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction231___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:648 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:649 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:650 */
-  REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction239_parser___ReduceAction239___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:651 */
-  REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction240___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:652 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction241_parser___ReduceAction241___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:653 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction242_parser___ReduceAction242___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:654 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction243___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction238___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:655 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction244_parser___ReduceAction244___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction239_parser___ReduceAction239___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:656 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction245_parser___ReduceAction245___init(REGB0);
+  REGB0 = TAG_Int(101);
+  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(98);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
+  REGB0 = TAG_Int(101);
+  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(99);
-  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init(REGB0);
+  REGB0 = TAG_Int(101);
+  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(100);
-  fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction254___init(REGB0);
+  REGB0 = TAG_Int(101);
+  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(100);
-  fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction255___init(REGB0);
+  REGB0 = TAG_Int(101);
+  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(100);
-  fra.me.REG[2] = NEW_ReduceAction256_parser___ReduceAction256___init(REGB0);
+  REGB0 = TAG_Int(101);
+  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(100);
-  fra.me.REG[2] = NEW_ReduceAction257_parser___ReduceAction257___init(REGB0);
+  REGB0 = TAG_Int(101);
+  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 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction258_parser___ReduceAction258___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction247___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:664 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction259_parser___ReduceAction259___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:665 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction260_parser___ReduceAction260___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:666 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction261_parser___ReduceAction261___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:667 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction262_parser___ReduceAction262___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:668 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction263___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:669 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction264_parser___ReduceAction264___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:670 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction265___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:671 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction266___init(REGB0);
+  REGB0 = TAG_Int(102);
+  fra.me.REG[2] = NEW_ReduceAction256_parser___ReduceAction256___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:672 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction267___init(REGB0);
+  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]);
   /* ./parser//parser.nit:673 */
-  REGB0 = TAG_Int(102);
-  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction270___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction258_parser___ReduceAction258___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:674 */
-  REGB0 = TAG_Int(102);
-  fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction271___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction259_parser___ReduceAction259___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:675 */
   REGB0 = TAG_Int(103);
-  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction272___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction260_parser___ReduceAction260___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:676 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction279_parser___ReduceAction279___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction261_parser___ReduceAction261___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:677 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction280_parser___ReduceAction280___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction262_parser___ReduceAction262___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:678 */
-  REGB0 = TAG_Int(105);
-  fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction281___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);
-  fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction282___init(REGB0);
+  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]);
   /* ./parser//parser.nit:680 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction283___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction271___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:681 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction284_parser___ReduceAction284___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction272___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:682 */
-  REGB0 = TAG_Int(107);
-  fra.me.REG[2] = NEW_ReduceAction285_parser___ReduceAction285___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction273___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:683 */
-  REGB0 = TAG_Int(107);
-  fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction286___init(REGB0);
+  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]);
   /* ./parser//parser.nit:684 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction275___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:685 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction276___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:686 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction277___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:687 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction293_parser___ReduceAction293___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction278_parser___ReduceAction278___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:688 */
-  REGB0 = TAG_Int(109);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction279_parser___ReduceAction279___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:689 */
-  REGB0 = TAG_Int(109);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction280_parser___ReduceAction280___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:690 */
-  REGB0 = TAG_Int(109);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction281___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:691 */
-  REGB0 = TAG_Int(110);
-  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction282___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:692 */
-  REGB0 = TAG_Int(110);
-  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction203___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction283___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:693 */
-  REGB0 = TAG_Int(110);
-  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction204___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 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
+  REGB0 = TAG_Int(107);
+  fra.me.REG[2] = NEW_ReduceAction287_parser___ReduceAction287___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:695 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction203___init(REGB0);
-  /* ./parser//parser.nit:152 */
+  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(111);
-  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction204___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 */
-  REGB0 = TAG_Int(112);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(109);
+  fra.me.REG[2] = NEW_ReduceAction296_parser___ReduceAction296___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:698 */
-  REGB0 = TAG_Int(112);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  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]);
   /* ./parser//parser.nit:699 */
-  REGB0 = TAG_Int(112);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  REGB0 = TAG_Int(110);
+  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction298___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:700 */
-  REGB0 = TAG_Int(113);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  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]);
   /* ./parser//parser.nit:701 */
-  REGB0 = TAG_Int(113);
-  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction295___init(REGB0);
+  REGB0 = TAG_Int(111);
+  fra.me.REG[2] = NEW_ReduceAction300_parser___ReduceAction300___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:702 */
-  REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  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]);
   /* ./parser//parser.nit:703 */
-  REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction297___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction302___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:704 */
-  REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction298___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(114);
-  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction299___init(REGB0);
+  REGB0 = TAG_Int(113);
+  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 */
-  REGB0 = TAG_Int(115);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(113);
+  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:707 */
-  REGB0 = TAG_Int(115);
-  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction301___init(REGB0);
+  REGB0 = TAG_Int(113);
+  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(116);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___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(116);
-  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction303___init(REGB0);
+  REGB0 = TAG_Int(114);
+  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 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction304___init(REGB0);
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:711 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction305___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 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction306___init(REGB0);
+  REGB0 = TAG_Int(115);
+  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction219___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:713 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction307_parser___ReduceAction307___init(REGB0);
+  REGB0 = TAG_Int(115);
+  fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction220___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:714 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction308___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 */
   REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction309___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:716 */
   REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction310___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction220___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:717 */
   REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
+  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(116);
-  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction312___init(REGB0);
+  REGB0 = TAG_Int(117);
+  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 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:720 */
   REGB0 = TAG_Int(117);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___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:721 */
-  REGB0 = TAG_Int(117);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
+  REGB0 = TAG_Int(118);
+  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(117);
-  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction316___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(118);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(119);
+  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 */
-  REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction318___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction314___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:725 */
-  REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:726 */
-  REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___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(119);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(120);
+  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(119);
-  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___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(119);
-  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
+  REGB0 = TAG_Int(121);
+  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 */
-  REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:731 */
-  REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction321___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:732 */
-  REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:733 */
-  REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:734 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction324_parser___ReduceAction324___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:735 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:736 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:737 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction231___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:738 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:739 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:740 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
+  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(121);
-  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init(REGB0);
+  REGB0 = TAG_Int(122);
+  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 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction336___init(REGB0);
+  REGB0 = TAG_Int(122);
+  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction332___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:743 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction337___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(121);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
+  REGB0 = TAG_Int(123);
+  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 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction335___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:746 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction336___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:747 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___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(121);
-  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___init(REGB0);
+  REGB0 = TAG_Int(124);
+  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 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction346___init(REGB0);
+  REGB0 = TAG_Int(124);
+  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction339___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:750 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction347___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(121);
-  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction348___init(REGB0);
+  REGB0 = TAG_Int(125);
+  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 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:753 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction351___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:754 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init(REGB0);
+  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]);
   /* ./parser//parser.nit:755 */
-  REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:756 */
-  REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  REGB0 = TAG_Int(126);
+  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 */
-  REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction247___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:758 */
-  REGB0 = TAG_Int(123);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(126);
+  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 */
-  REGB0 = TAG_Int(123);
-  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction295___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:760 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction252___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:761 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction297___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:762 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction298___init(REGB0);
+  REGB0 = TAG_Int(126);
+  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 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction299___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction353___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:764 */
-  REGB0 = TAG_Int(125);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(126);
+  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 */
-  REGB0 = TAG_Int(125);
-  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction301___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction358___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:766 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction359___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:767 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction303___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:768 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction304___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:769 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction305___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction362___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:770 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction306___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction363___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:771 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction307_parser___ReduceAction307___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction364___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:772 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction308___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_ReduceAction309_parser___ReduceAction309___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 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction310___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction368___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:775 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
+  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(126);
-  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction312___init(REGB0);
+  REGB0 = TAG_Int(127);
+  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 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:778 */
   REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___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:779 */
-  REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
+  REGB0 = TAG_Int(128);
+  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(127);
-  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction316___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(128);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(129);
+  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 */
-  REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction318___init(REGB0);
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction314___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:783 */
-  REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:784 */
-  REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___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(129);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(130);
+  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(129);
-  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___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(129);
-  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
+  REGB0 = TAG_Int(131);
+  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 */
-  REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:789 */
-  REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction321___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:790 */
-  REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction637_parser___ReduceAction637___init(REGB0);
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:791 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction638_parser___ReduceAction638___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:792 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction639_parser___ReduceAction639___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction324_parser___ReduceAction324___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:793 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:794 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:795 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction642_parser___ReduceAction642___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:796 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction337___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:797 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:798 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
+  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(131);
-  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
+  REGB0 = TAG_Int(132);
+  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 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init(REGB0);
+  REGB0 = TAG_Int(132);
+  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction332___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:801 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___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(131);
-  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction346___init(REGB0);
+  REGB0 = TAG_Int(133);
+  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 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction347___init(REGB0);
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction335___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:804 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction348___init(REGB0);
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction336___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:805 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___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(131);
-  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction351___init(REGB0);
+  REGB0 = TAG_Int(134);
+  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 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init(REGB0);
+  REGB0 = TAG_Int(134);
+  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction339___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:808 */
-  REGB0 = TAG_Int(132);
-  fra.me.REG[2] = NEW_ReduceAction655_parser___ReduceAction655___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(132);
-  fra.me.REG[2] = NEW_ReduceAction656_parser___ReduceAction656___init(REGB0);
+  REGB0 = TAG_Int(135);
+  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(133);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(135);
+  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(133);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  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]);
   /* ./parser//parser.nit:812 */
-  REGB0 = TAG_Int(133);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction659_parser___ReduceAction659___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:813 */
-  REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  REGB0 = TAG_Int(136);
+  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 */
-  REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:815 */
-  REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  REGB0 = TAG_Int(136);
+  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(135);
+  REGB0 = TAG_Int(136);
   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(135);
-  fra.me.REG[2] = NEW_ReduceAction664_parser___ReduceAction664___init(REGB0);
+  REGB0 = TAG_Int(136);
+  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 */
   REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction665_parser___ReduceAction665___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction358___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:819 */
   REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction666_parser___ReduceAction666___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction359___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:820 */
-  REGB0 = TAG_Int(137);
-  fra.me.REG[2] = NEW_ReduceAction667_parser___ReduceAction667___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:821 */
-  REGB0 = TAG_Int(137);
-  fra.me.REG[2] = NEW_ReduceAction668_parser___ReduceAction668___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:822 */
-  REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction669_parser___ReduceAction669___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction362___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:823 */
-  REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction670_parser___ReduceAction670___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction363___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:824 */
-  REGB0 = TAG_Int(139);
-  fra.me.REG[2] = NEW_ReduceAction667_parser___ReduceAction667___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction364___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:825 */
-  REGB0 = TAG_Int(139);
-  fra.me.REG[2] = NEW_ReduceAction668_parser___ReduceAction668___init(REGB0);
+  REGB0 = TAG_Int(136);
+  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(140);
-  fra.me.REG[2] = NEW_ReduceAction673_parser___ReduceAction673___init(REGB0);
+  REGB0 = TAG_Int(136);
+  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 */
-  REGB0 = TAG_Int(140);
-  fra.me.REG[2] = NEW_ReduceAction674_parser___ReduceAction674___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction368___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:828 */
-  REGB0 = TAG_Int(141);
-  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 */
-  REGB0 = TAG_Int(141);
+  REGB0 = TAG_Int(137);
   fra.me.REG[2] = NEW_ReduceAction676_parser___ReduceAction676___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:830 */
-  REGB0 = TAG_Int(142);
+  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(142);
-  fra.me.REG[2] = NEW_ReduceAction678_parser___ReduceAction678___init(REGB0);
+  REGB0 = TAG_Int(138);
+  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 */
-  REGB0 = TAG_Int(143);
-  fra.me.REG[2] = NEW_ReduceAction198_parser___ReduceAction198___init(REGB0);
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:833 */
-  REGB0 = TAG_Int(143);
-  fra.me.REG[2] = NEW_ReduceAction680_parser___ReduceAction680___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(144);
-  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction366___init(REGB0);
+  REGB0 = TAG_Int(139);
+  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 */
-  REGB0 = TAG_Int(144);
-  fra.me.REG[2] = NEW_ReduceAction682_parser___ReduceAction682___init(REGB0);
+  REGB0 = TAG_Int(139);
+  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:836 */
-  REGB0 = TAG_Int(145);
-  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction373___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 */
-  REGB0 = TAG_Int(145);
+  REGB0 = TAG_Int(140);
   fra.me.REG[2] = NEW_ReduceAction684_parser___ReduceAction684___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:838 */
-  REGB0 = TAG_Int(146);
-  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction366___init(REGB0);
+  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]);
   /* ./parser//parser.nit:839 */
-  REGB0 = TAG_Int(146);
-  fra.me.REG[2] = NEW_ReduceAction682_parser___ReduceAction682___init(REGB0);
+  REGB0 = TAG_Int(141);
+  fra.me.REG[2] = NEW_ReduceAction686_parser___ReduceAction686___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:840 */
-  REGB0 = TAG_Int(147);
-  fra.me.REG[2] = NEW_ReduceAction374_parser___ReduceAction374___init(REGB0);
+  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]);
   /* ./parser//parser.nit:841 */
-  REGB0 = TAG_Int(147);
+  REGB0 = TAG_Int(142);
   fra.me.REG[2] = NEW_ReduceAction688_parser___ReduceAction688___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:842 */
-  REGB0 = TAG_Int(148);
+  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]);
   /* ./parser//parser.nit:843 */
-  REGB0 = TAG_Int(148);
+  REGB0 = TAG_Int(143);
   fra.me.REG[2] = NEW_ReduceAction690_parser___ReduceAction690___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:844 */
-  REGB0 = TAG_Int(149);
+  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 */
+  REGB0 = TAG_Int(144);
+  fra.me.REG[2] = NEW_ReduceAction688_parser___ReduceAction688___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:846 */
+  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 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction694_parser___ReduceAction694___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:848 */
+  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]);
+  /* ./parser//parser.nit:849 */
+  REGB0 = TAG_Int(146);
+  fra.me.REG[2] = NEW_ReduceAction696_parser___ReduceAction696___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:850 */
+  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]);
+  /* ./parser//parser.nit:851 */
+  REGB0 = TAG_Int(147);
+  fra.me.REG[2] = NEW_ReduceAction698_parser___ReduceAction698___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:852 */
+  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]);
+  /* ./parser//parser.nit:853 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction700_parser___ReduceAction700___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:854 */
+  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_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(149);
-  fra.me.REG[2] = NEW_ReduceAction692_parser___ReduceAction692___init(REGB0);
+  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_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(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_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(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_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(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_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(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]);
+  /* ./parser//parser.nit:865 */
+  REGB0 = TAG_Int(154);
+  fra.me.REG[2] = NEW_ReduceAction712_parser___ReduceAction712___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:866 */
+  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]);
+  /* ./parser//parser.nit:867 */
+  REGB0 = TAG_Int(155);
+  fra.me.REG[2] = NEW_ReduceAction714_parser___ReduceAction714___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./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]);
@@ -4277,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 = 876;
+  fra.me.line = 899;
   fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___visit;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -4292,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:878 */
+  /* ./parser//parser.nit:901 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -4306,25 +4421,25 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:879 */
+    /* ./parser//parser.nit:902 */
     goto label1;
   } else {
-    /* ./parser//parser.nit:880 */
+    /* ./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:881 */
+      /* ./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, 881);
+        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:882 */
+      /* ./parser//parser.nit:905 */
       ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[2];
-      /* ./parser//parser.nit:885 */
+      /* ./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, 885);
+        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 */
@@ -4358,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:886 */
+          /* ./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);
@@ -4372,19 +4487,19 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
         }
       }
       label2: while(0);
-      /* ./parser//parser.nit:888 */
+      /* ./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, 888);
+        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:891 */
+      /* ./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, 891);
+        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 */
@@ -4418,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:894 */
+          /* ./parser//parser.nit:917 */
           fra.me.REG[6] = fra.me.REG[2];
-          /* ./parser//parser.nit:895 */
+          /* ./parser//parser.nit:918 */
           fra.me.REG[7] = ATTR_parser___Prod____last_location(fra.me.REG[5]);
-          /* ./parser//parser.nit:896 */
+          /* ./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, 896);
+            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, 896);
+            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]);
@@ -4450,42 +4565,42 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
         }
       }
       label3: while(0);
-      /* ./parser//parser.nit:898 */
+      /* ./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, 898);
+        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:900 */
+      /* ./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, 900);
+        nit_abort("Assert failed", NULL, LOCATE_parser, 923);
       }
-      /* ./parser//parser.nit:901 */
+      /* ./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, 901);
+        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:903 */
+      /* ./parser//parser.nit:926 */
       fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
-      /* ./parser//parser.nit:904 */
+      /* ./parser//parser.nit:927 */
       ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = NIT_NULL;
-      /* ./parser//parser.nit:905 */
+      /* ./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, 905);
+        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:906 */
+      /* ./parser//parser.nit:929 */
       fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
-      /* ./parser//parser.nit:907 */
+      /* ./parser//parser.nit:930 */
       REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -4501,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:909 */
+      /* ./parser//parser.nit:932 */
       ATTR_parser___Prod____last_location(fra.me.REG[1]) = fra.me.REG[3];
-      /* ./parser//parser.nit:910 */
+      /* ./parser//parser.nit:933 */
       fra.me.REG[2] = ATTR_parser___Prod____first_location(fra.me.REG[1]);
-      /* ./parser//parser.nit:911 */
+      /* ./parser//parser.nit:934 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -4520,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:913 */
+        /* ./parser//parser.nit:936 */
         REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
         } else {
@@ -4536,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, 913);
+          nit_abort("Assert failed", NULL, LOCATE_parser, 936);
         }
-        /* ./parser//parser.nit:915 */
+        /* ./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, 915);
+          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, 915);
+          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, 915);
+          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, 915);
+          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, 915);
+          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, 915);
+          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:917 */
+        /* ./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, 917);
+          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 */
@@ -4608,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:920 */
+            /* ./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, 920);
+              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, 920);
+              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, 920);
+              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, 920);
+              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, 920);
+              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);
@@ -4648,19 +4763,19 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           }
         }
         label4: while(0);
-        /* ./parser//parser.nit:922 */
+        /* ./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, 922);
+          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:924 */
+        /* ./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, 924);
+          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 */
@@ -4694,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:927 */
+            /* ./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, 927);
+              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, 927);
+              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, 927);
+              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, 927);
+              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, 927);
+              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);
@@ -4734,16 +4849,16 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           }
         }
         label5: while(0);
-        /* ./parser//parser.nit:929 */
+        /* ./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, 929);
+          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:933 */
+        /* ./parser//parser.nit:956 */
         REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
@@ -4757,20 +4872,20 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           }
         }
         if (UNTAG_Bool(REGB2)) {
-          /* ./parser//parser.nit:935 */
+          /* ./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, 935);
+            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:938 */
+          /* ./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, 938);
+            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]);
@@ -4789,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 = 944;
+  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:944 */
+  /* ./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;
@@ -4806,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 = 949;
+  fra.me.line = 972;
   fra.me.meth = LOCATE_parser___ReduceAction___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./parser//parser.nit:949 */
-  nit_abort("Deferred method called", NULL, LOCATE_parser, 949);
+  /* ./parser//parser.nit:972 */
+  nit_abort("Deferred method called", NULL, LOCATE_parser, 972);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -4821,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 = 950;
+  fra.me.line = 973;
   fra.me.meth = LOCATE_parser___ReduceAction___concat;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4831,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:952 */
+  /* ./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:953 */
+  /* ./parser//parser.nit:976 */
   CALL_abstract_collection___Sequence___append(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:954 */
+  /* ./parser//parser.nit:977 */
   fra.me.REG[0] = fra.me.REG[1];
   goto label1;
   label1: while(0);
@@ -4867,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 = 960;
+  fra.me.line = 983;
   fra.me.meth = LOCATE_parser___ReduceAction0___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -4878,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:962 */
+  /* ./parser//parser.nit:985 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:963 */
+  /* ./parser//parser.nit:986 */
   fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:964 */
+  /* ./parser//parser.nit:987 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:965 */
+  /* ./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:970 */
+  /* ./parser//parser.nit:993 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:971 */
+  /* ./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, 971);
+    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);
@@ -4908,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 = 974;
+  fra.me.line = 997;
   fra.me.meth = LOCATE_parser___ReduceAction0___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4916,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:974 */
+  /* ./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;
@@ -4930,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 = 978;
+  fra.me.line = 1001;
   fra.me.meth = LOCATE_parser___ReduceAction1___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -4942,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:980 */
+  /* ./parser//parser.nit:1003 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:981 */
+  /* ./parser//parser.nit:1004 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:982 */
+  /* ./parser//parser.nit:1005 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:983 */
+  /* ./parser//parser.nit:1006 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:985 */
+  /* ./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, 985);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1008);
   }
-  /* ./parser//parser.nit:986 */
+  /* ./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:991 */
+  /* ./parser//parser.nit:1014 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:992 */
+  /* ./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, 992);
+    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);
@@ -4980,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 = 995;
+  fra.me.line = 1018;
   fra.me.meth = LOCATE_parser___ReduceAction1___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4988,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:995 */
+  /* ./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;
@@ -5002,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 = 999;
+  fra.me.line = 1022;
   fra.me.meth = LOCATE_parser___ReduceAction2___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -5014,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:1001 */
+  /* ./parser//parser.nit:1024 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1002 */
+  /* ./parser//parser.nit:1025 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1003 */
+  /* ./parser//parser.nit:1026 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1004 */
+  /* ./parser//parser.nit:1027 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1006 */
+  /* ./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, 1006);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1029);
   }
-  /* ./parser//parser.nit:1007 */
+  /* ./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:1008 */
+  /* ./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:1013 */
+  /* ./parser//parser.nit:1036 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1014 */
+  /* ./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, 1014);
+    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);
@@ -5055,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 = 1017;
+  fra.me.line = 1040;
   fra.me.meth = LOCATE_parser___ReduceAction2___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5063,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:1017 */
+  /* ./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;
@@ -5077,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 = 1021;
+  fra.me.line = 1044;
   fra.me.meth = LOCATE_parser___ReduceAction3___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5090,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:1023 */
+  /* ./parser//parser.nit:1046 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1024 */
+  /* ./parser//parser.nit:1047 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1025 */
+  /* ./parser//parser.nit:1048 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1026 */
+  /* ./parser//parser.nit:1049 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1027 */
+  /* ./parser//parser.nit:1050 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1029 */
+  /* ./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, 1029);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1052);
   }
-  /* ./parser//parser.nit:1031 */
+  /* ./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, 1031);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1054);
   }
-  /* ./parser//parser.nit:1032 */
+  /* ./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:1033 */
+  /* ./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:1038 */
+  /* ./parser//parser.nit:1061 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1039 */
+  /* ./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, 1039);
+    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);
@@ -5139,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 = 1042;
+  fra.me.line = 1065;
   fra.me.meth = LOCATE_parser___ReduceAction3___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5147,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:1042 */
+  /* ./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;
@@ -5161,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 = 1046;
+  fra.me.line = 1069;
   fra.me.meth = LOCATE_parser___ReduceAction4___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -5173,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:1048 */
+  /* ./parser//parser.nit:1071 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1049 */
+  /* ./parser//parser.nit:1072 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1050 */
+  /* ./parser//parser.nit:1073 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1051 */
+  /* ./parser//parser.nit:1074 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1053 */
+  /* ./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, 1053);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1076);
   }
-  /* ./parser//parser.nit:1054 */
+  /* ./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:1055 */
+  /* ./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:1060 */
+  /* ./parser//parser.nit:1083 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1061 */
+  /* ./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, 1061);
+    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);
@@ -5214,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 = 1064;
+  fra.me.line = 1087;
   fra.me.meth = LOCATE_parser___ReduceAction4___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5222,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:1064 */
+  /* ./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;
@@ -5236,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 = 1068;
+  fra.me.line = 1091;
   fra.me.meth = LOCATE_parser___ReduceAction5___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5249,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:1070 */
+  /* ./parser//parser.nit:1093 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1071 */
+  /* ./parser//parser.nit:1094 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1072 */
+  /* ./parser//parser.nit:1095 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1073 */
+  /* ./parser//parser.nit:1096 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1074 */
+  /* ./parser//parser.nit:1097 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1076 */
+  /* ./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, 1076);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1099);
   }
-  /* ./parser//parser.nit:1078 */
+  /* ./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, 1078);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1101);
   }
-  /* ./parser//parser.nit:1079 */
+  /* ./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:1080 */
+  /* ./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:1085 */
+  /* ./parser//parser.nit:1108 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1086 */
+  /* ./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, 1086);
+    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);
@@ -5298,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 = 1089;
+  fra.me.line = 1112;
   fra.me.meth = LOCATE_parser___ReduceAction5___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5306,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:1089 */
+  /* ./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;
@@ -5320,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 = 1093;
+  fra.me.line = 1116;
   fra.me.meth = LOCATE_parser___ReduceAction6___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5333,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:1095 */
+  /* ./parser//parser.nit:1118 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1096 */
+  /* ./parser//parser.nit:1119 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1097 */
+  /* ./parser//parser.nit:1120 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1098 */
+  /* ./parser//parser.nit:1121 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1099 */
+  /* ./parser//parser.nit:1122 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1101 */
+  /* ./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, 1101);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1124);
   }
-  /* ./parser//parser.nit:1102 */
+  /* ./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:1104 */
+  /* ./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, 1104);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1127);
   }
-  /* ./parser//parser.nit:1105 */
+  /* ./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:1106 */
+  /* ./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:1111 */
+  /* ./parser//parser.nit:1134 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1112 */
+  /* ./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, 1112);
+    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);
@@ -5385,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 = 1115;
+  fra.me.line = 1138;
   fra.me.meth = LOCATE_parser___ReduceAction6___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5393,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:1115 */
+  /* ./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;
@@ -5407,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 = 1119;
+  fra.me.line = 1142;
   fra.me.meth = LOCATE_parser___ReduceAction7___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -5421,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:1121 */
+  /* ./parser//parser.nit:1144 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1122 */
+  /* ./parser//parser.nit:1145 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1123 */
+  /* ./parser//parser.nit:1146 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1124 */
+  /* ./parser//parser.nit:1147 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1125 */
+  /* ./parser//parser.nit:1148 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1126 */
+  /* ./parser//parser.nit:1149 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1128 */
+  /* ./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, 1128);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1151);
   }
-  /* ./parser//parser.nit:1130 */
+  /* ./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, 1130);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1153);
   }
-  /* ./parser//parser.nit:1131 */
+  /* ./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:1133 */
+  /* ./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, 1133);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1156);
   }
-  /* ./parser//parser.nit:1134 */
+  /* ./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:1135 */
+  /* ./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:1140 */
+  /* ./parser//parser.nit:1163 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1141 */
+  /* ./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, 1141);
+    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);
@@ -5481,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 = 1144;
+  fra.me.line = 1167;
   fra.me.meth = LOCATE_parser___ReduceAction7___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5489,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:1144 */
+  /* ./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;
@@ -5504,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 = 1148;
+  fra.me.line = 1171;
   fra.me.meth = LOCATE_parser___ReduceAction8___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5517,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:1150 */
+  /* ./parser//parser.nit:1173 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1151 */
+  /* ./parser//parser.nit:1174 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1152 */
+  /* ./parser//parser.nit:1175 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1153 */
+  /* ./parser//parser.nit:1176 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1154 */
+  /* ./parser//parser.nit:1177 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1156 */
+  /* ./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, 1156);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1179);
   }
-  /* ./parser//parser.nit:1157 */
+  /* ./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:1158 */
+  /* ./parser//parser.nit:1181 */
   fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* ./parser//parser.nit:1161 */
+  /* ./parser//parser.nit:1184 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5553,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:1162 */
+    /* ./parser//parser.nit:1185 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
-  /* ./parser//parser.nit:1164 */
+  /* ./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:1169 */
+  /* ./parser//parser.nit:1192 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1170 */
+  /* ./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, 1170);
+    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);
@@ -5580,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 = 1173;
+  fra.me.line = 1196;
   fra.me.meth = LOCATE_parser___ReduceAction8___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5588,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:1173 */
+  /* ./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;
@@ -5603,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 = 1177;
+  fra.me.line = 1200;
   fra.me.meth = LOCATE_parser___ReduceAction9___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -5617,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:1179 */
+  /* ./parser//parser.nit:1202 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1180 */
+  /* ./parser//parser.nit:1203 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1181 */
+  /* ./parser//parser.nit:1204 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1182 */
+  /* ./parser//parser.nit:1205 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1183 */
+  /* ./parser//parser.nit:1206 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1185 */
+  /* ./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, 1185);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1208);
   }
-  /* ./parser//parser.nit:1186 */
+  /* ./parser//parser.nit:1209 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1188 */
+  /* ./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, 1188);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1211);
   }
-  /* ./parser//parser.nit:1189 */
+  /* ./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:1190 */
+  /* ./parser//parser.nit:1213 */
   fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* ./parser//parser.nit:1193 */
+  /* ./parser//parser.nit:1216 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5661,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:1194 */
+    /* ./parser//parser.nit:1217 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  /* ./parser//parser.nit:1196 */
+  /* ./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:1201 */
+  /* ./parser//parser.nit:1224 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1202 */
+  /* ./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, 1202);
+    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);
@@ -5688,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 = 1205;
+  fra.me.line = 1228;
   fra.me.meth = LOCATE_parser___ReduceAction9___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5696,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:1205 */
+  /* ./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;
@@ -5711,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 = 1209;
+  fra.me.line = 1232;
   fra.me.meth = LOCATE_parser___ReduceAction10___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5724,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:1211 */
+  /* ./parser//parser.nit:1234 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1212 */
+  /* ./parser//parser.nit:1235 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1213 */
+  /* ./parser//parser.nit:1236 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1214 */
+  /* ./parser//parser.nit:1237 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1215 */
+  /* ./parser//parser.nit:1238 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1217 */
+  /* ./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, 1217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1240);
   }
-  /* ./parser//parser.nit:1218 */
+  /* ./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:1219 */
+  /* ./parser//parser.nit:1242 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1221 */
+  /* ./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, 1221);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1244);
   }
-  /* ./parser//parser.nit:1222 */
+  /* ./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:1223 */
+  /* ./parser//parser.nit:1246 */
   fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* ./parser//parser.nit:1226 */
+  /* ./parser//parser.nit:1249 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5771,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:1227 */
+    /* ./parser//parser.nit:1250 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:1229 */
+  /* ./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:1234 */
+  /* ./parser//parser.nit:1257 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1235 */
+  /* ./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, 1235);
+    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);
@@ -5798,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 = 1238;
+  fra.me.line = 1261;
   fra.me.meth = LOCATE_parser___ReduceAction10___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5806,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:1238 */
+  /* ./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;
@@ -5821,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 = 1242;
+  fra.me.line = 1265;
   fra.me.meth = LOCATE_parser___ReduceAction11___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -5835,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:1244 */
+  /* ./parser//parser.nit:1267 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1245 */
+  /* ./parser//parser.nit:1268 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1246 */
+  /* ./parser//parser.nit:1269 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1247 */
+  /* ./parser//parser.nit:1270 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1248 */
+  /* ./parser//parser.nit:1271 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1249 */
+  /* ./parser//parser.nit:1272 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1251 */
+  /* ./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, 1251);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1274);
   }
-  /* ./parser//parser.nit:1253 */
+  /* ./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, 1253);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1276);
   }
-  /* ./parser//parser.nit:1254 */
+  /* ./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:1255 */
+  /* ./parser//parser.nit:1278 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1257 */
+  /* ./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, 1257);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1280);
   }
-  /* ./parser//parser.nit:1258 */
+  /* ./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:1259 */
+  /* ./parser//parser.nit:1282 */
   fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* ./parser//parser.nit:1262 */
+  /* ./parser//parser.nit:1285 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5890,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:1263 */
+    /* ./parser//parser.nit:1286 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:1265 */
+  /* ./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:1270 */
+  /* ./parser//parser.nit:1293 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1271 */
+  /* ./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, 1271);
+    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);
@@ -5917,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 = 1274;
+  fra.me.line = 1297;
   fra.me.meth = LOCATE_parser___ReduceAction11___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5925,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:1274 */
+  /* ./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;
@@ -5940,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 = 1278;
+  fra.me.line = 1301;
   fra.me.meth = LOCATE_parser___ReduceAction12___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -5954,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:1280 */
+  /* ./parser//parser.nit:1303 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1281 */
+  /* ./parser//parser.nit:1304 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1282 */
+  /* ./parser//parser.nit:1305 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1283 */
+  /* ./parser//parser.nit:1306 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1284 */
+  /* ./parser//parser.nit:1307 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1286 */
+  /* ./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, 1286);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1309);
   }
-  /* ./parser//parser.nit:1287 */
+  /* ./parser//parser.nit:1310 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1289 */
+  /* ./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, 1289);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1312);
   }
-  /* ./parser//parser.nit:1290 */
+  /* ./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:1291 */
+  /* ./parser//parser.nit:1314 */
   fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* ./parser//parser.nit:1294 */
+  /* ./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:1295 */
+  /* ./parser//parser.nit:1318 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6001,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:1296 */
+    /* ./parser//parser.nit:1319 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  /* ./parser//parser.nit:1298 */
+  /* ./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:1303 */
+  /* ./parser//parser.nit:1326 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1304 */
+  /* ./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, 1304);
+    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);
@@ -6028,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 = 1307;
+  fra.me.line = 1330;
   fra.me.meth = LOCATE_parser___ReduceAction12___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6036,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:1307 */
+  /* ./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;
@@ -6051,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 = 1311;
+  fra.me.line = 1334;
   fra.me.meth = LOCATE_parser___ReduceAction13___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -6066,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:1313 */
+  /* ./parser//parser.nit:1336 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1314 */
+  /* ./parser//parser.nit:1337 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1315 */
+  /* ./parser//parser.nit:1338 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1316 */
+  /* ./parser//parser.nit:1339 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1317 */
+  /* ./parser//parser.nit:1340 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1318 */
+  /* ./parser//parser.nit:1341 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1320 */
+  /* ./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, 1320);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1343);
   }
-  /* ./parser//parser.nit:1322 */
+  /* ./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, 1322);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1345);
   }
-  /* ./parser//parser.nit:1323 */
+  /* ./parser//parser.nit:1346 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1325 */
+  /* ./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, 1325);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1348);
   }
-  /* ./parser//parser.nit:1326 */
+  /* ./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:1327 */
+  /* ./parser//parser.nit:1350 */
   fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* ./parser//parser.nit:1330 */
+  /* ./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:1331 */
+  /* ./parser//parser.nit:1354 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6121,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:1332 */
+    /* ./parser//parser.nit:1355 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  /* ./parser//parser.nit:1334 */
+  /* ./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:1339 */
+  /* ./parser//parser.nit:1362 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1340 */
+  /* ./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, 1340);
+    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);
@@ -6148,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 = 1343;
+  fra.me.line = 1366;
   fra.me.meth = LOCATE_parser___ReduceAction13___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6156,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:1343 */
+  /* ./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;
@@ -6171,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 = 1347;
+  fra.me.line = 1370;
   fra.me.meth = LOCATE_parser___ReduceAction14___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6185,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:1349 */
+  /* ./parser//parser.nit:1372 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1350 */
+  /* ./parser//parser.nit:1373 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1351 */
+  /* ./parser//parser.nit:1374 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1352 */
+  /* ./parser//parser.nit:1375 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1353 */
+  /* ./parser//parser.nit:1376 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1354 */
+  /* ./parser//parser.nit:1377 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1356 */
+  /* ./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, 1356);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1379);
   }
-  /* ./parser//parser.nit:1357 */
+  /* ./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:1359 */
+  /* ./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, 1359);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1382);
   }
-  /* ./parser//parser.nit:1360 */
+  /* ./parser//parser.nit:1383 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1362 */
+  /* ./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, 1362);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1385);
   }
-  /* ./parser//parser.nit:1363 */
+  /* ./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:1364 */
+  /* ./parser//parser.nit:1387 */
   fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1367 */
+  /* ./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:1368 */
+  /* ./parser//parser.nit:1391 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6243,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:1369 */
+    /* ./parser//parser.nit:1392 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1371 */
+  /* ./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:1376 */
+  /* ./parser//parser.nit:1399 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1377 */
+  /* ./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, 1377);
+    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);
@@ -6270,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 = 1380;
+  fra.me.line = 1403;
   fra.me.meth = LOCATE_parser___ReduceAction14___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6278,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:1380 */
+  /* ./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;
@@ -6293,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 = 1384;
+  fra.me.line = 1407;
   fra.me.meth = LOCATE_parser___ReduceAction15___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -6308,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:1386 */
+  /* ./parser//parser.nit:1409 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1387 */
+  /* ./parser//parser.nit:1410 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1388 */
+  /* ./parser//parser.nit:1411 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1389 */
+  /* ./parser//parser.nit:1412 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1390 */
+  /* ./parser//parser.nit:1413 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1391 */
+  /* ./parser//parser.nit:1414 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1392 */
+  /* ./parser//parser.nit:1415 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1394 */
+  /* ./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, 1394);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1417);
   }
-  /* ./parser//parser.nit:1396 */
+  /* ./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, 1396);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1419);
   }
-  /* ./parser//parser.nit:1397 */
+  /* ./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:1399 */
+  /* ./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, 1399);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1422);
   }
-  /* ./parser//parser.nit:1400 */
+  /* ./parser//parser.nit:1423 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1402 */
+  /* ./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, 1402);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1425);
   }
-  /* ./parser//parser.nit:1403 */
+  /* ./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:1404 */
+  /* ./parser//parser.nit:1427 */
   fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1407 */
+  /* ./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:1408 */
+  /* ./parser//parser.nit:1431 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6374,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:1409 */
+    /* ./parser//parser.nit:1432 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1411 */
+  /* ./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:1416 */
+  /* ./parser//parser.nit:1439 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1417 */
+  /* ./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, 1417);
+    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);
@@ -6401,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 = 1420;
+  fra.me.line = 1443;
   fra.me.meth = LOCATE_parser___ReduceAction15___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6409,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:1420 */
+  /* ./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;
@@ -6424,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 = 1424;
+  fra.me.line = 1447;
   fra.me.meth = LOCATE_parser___ReduceAction16___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -6436,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:1426 */
+  /* ./parser//parser.nit:1449 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1427 */
+  /* ./parser//parser.nit:1450 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1428 */
+  /* ./parser//parser.nit:1451 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1429 */
+  /* ./parser//parser.nit:1452 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1431 */
+  /* ./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, 1431);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1454);
   }
-  /* ./parser//parser.nit:1432 */
+  /* ./parser//parser.nit:1455 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6465,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:1433 */
+    /* ./parser//parser.nit:1456 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1435 */
+  /* ./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:1440 */
+  /* ./parser//parser.nit:1463 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1441 */
+  /* ./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, 1441);
+    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);
@@ -6492,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 = 1444;
+  fra.me.line = 1467;
   fra.me.meth = LOCATE_parser___ReduceAction16___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6500,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:1444 */
+  /* ./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;
@@ -6515,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 = 1448;
+  fra.me.line = 1471;
   fra.me.meth = LOCATE_parser___ReduceAction17___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -6528,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:1450 */
+  /* ./parser//parser.nit:1473 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1451 */
+  /* ./parser//parser.nit:1474 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1452 */
+  /* ./parser//parser.nit:1475 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1453 */
+  /* ./parser//parser.nit:1476 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1454 */
+  /* ./parser//parser.nit:1477 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1456 */
+  /* ./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, 1456);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1479);
   }
-  /* ./parser//parser.nit:1458 */
+  /* ./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, 1458);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1481);
   }
-  /* ./parser//parser.nit:1459 */
+  /* ./parser//parser.nit:1482 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6565,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:1460 */
+    /* ./parser//parser.nit:1483 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1462 */
+  /* ./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:1467 */
+  /* ./parser//parser.nit:1490 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1468 */
+  /* ./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, 1468);
+    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);
@@ -6592,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 = 1471;
+  fra.me.line = 1494;
   fra.me.meth = LOCATE_parser___ReduceAction17___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6600,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:1471 */
+  /* ./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;
@@ -6615,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 = 1475;
+  fra.me.line = 1498;
   fra.me.meth = LOCATE_parser___ReduceAction18___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -6628,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:1477 */
+  /* ./parser//parser.nit:1500 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1478 */
+  /* ./parser//parser.nit:1501 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1479 */
+  /* ./parser//parser.nit:1502 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1480 */
+  /* ./parser//parser.nit:1503 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1481 */
+  /* ./parser//parser.nit:1504 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1483 */
+  /* ./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, 1483);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1506);
   }
-  /* ./parser//parser.nit:1484 */
+  /* ./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:1486 */
+  /* ./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, 1486);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1509);
   }
-  /* ./parser//parser.nit:1487 */
+  /* ./parser//parser.nit:1510 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6668,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:1488 */
+    /* ./parser//parser.nit:1511 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1490 */
+  /* ./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:1495 */
+  /* ./parser//parser.nit:1518 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1496 */
+  /* ./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, 1496);
+    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);
@@ -6695,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 = 1499;
+  fra.me.line = 1522;
   fra.me.meth = LOCATE_parser___ReduceAction18___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6703,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:1499 */
+  /* ./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;
@@ -6718,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 = 1503;
+  fra.me.line = 1526;
   fra.me.meth = LOCATE_parser___ReduceAction19___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6732,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:1505 */
+  /* ./parser//parser.nit:1528 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1506 */
+  /* ./parser//parser.nit:1529 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1507 */
+  /* ./parser//parser.nit:1530 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1508 */
+  /* ./parser//parser.nit:1531 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1509 */
+  /* ./parser//parser.nit:1532 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1510 */
+  /* ./parser//parser.nit:1533 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1512 */
+  /* ./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, 1512);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1535);
   }
-  /* ./parser//parser.nit:1514 */
+  /* ./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, 1514);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1537);
   }
-  /* ./parser//parser.nit:1515 */
+  /* ./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:1517 */
+  /* ./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, 1517);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1540);
   }
-  /* ./parser//parser.nit:1518 */
+  /* ./parser//parser.nit:1541 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6780,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:1519 */
+    /* ./parser//parser.nit:1542 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1521 */
+  /* ./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:1526 */
+  /* ./parser//parser.nit:1549 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1527 */
+  /* ./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, 1527);
+    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);
@@ -6807,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 = 1530;
+  fra.me.line = 1553;
   fra.me.meth = LOCATE_parser___ReduceAction19___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6815,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:1530 */
+  /* ./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;
@@ -6830,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 = 1534;
+  fra.me.line = 1557;
   fra.me.meth = LOCATE_parser___ReduceAction20___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -6843,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:1536 */
+  /* ./parser//parser.nit:1559 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1537 */
+  /* ./parser//parser.nit:1560 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1538 */
+  /* ./parser//parser.nit:1561 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1539 */
+  /* ./parser//parser.nit:1562 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1540 */
+  /* ./parser//parser.nit:1563 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1542 */
+  /* ./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, 1542);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1565);
   }
-  /* ./parser//parser.nit:1544 */
+  /* ./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, 1544);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1567);
   }
-  /* ./parser//parser.nit:1545 */
+  /* ./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:1546 */
+  /* ./parser//parser.nit:1569 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6883,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:1547 */
+    /* ./parser//parser.nit:1570 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1549 */
+  /* ./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:1554 */
+  /* ./parser//parser.nit:1577 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1555 */
+  /* ./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, 1555);
+    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);
@@ -6910,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 = 1558;
+  fra.me.line = 1581;
   fra.me.meth = LOCATE_parser___ReduceAction20___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6918,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:1558 */
+  /* ./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;
@@ -6933,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 = 1562;
+  fra.me.line = 1585;
   fra.me.meth = LOCATE_parser___ReduceAction21___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6947,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:1564 */
+  /* ./parser//parser.nit:1587 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1565 */
+  /* ./parser//parser.nit:1588 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1566 */
+  /* ./parser//parser.nit:1589 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1567 */
+  /* ./parser//parser.nit:1590 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1568 */
+  /* ./parser//parser.nit:1591 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1569 */
+  /* ./parser//parser.nit:1592 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1571 */
+  /* ./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, 1571);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1594);
   }
-  /* ./parser//parser.nit:1573 */
+  /* ./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, 1573);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1596);
   }
-  /* ./parser//parser.nit:1575 */
+  /* ./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, 1575);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1598);
   }
-  /* ./parser//parser.nit:1576 */
+  /* ./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:1577 */
+  /* ./parser//parser.nit:1600 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6995,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:1578 */
+    /* ./parser//parser.nit:1601 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1580 */
+  /* ./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:1585 */
+  /* ./parser//parser.nit:1608 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1586 */
+  /* ./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, 1586);
+    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);
@@ -7022,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 = 1589;
+  fra.me.line = 1612;
   fra.me.meth = LOCATE_parser___ReduceAction21___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7030,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:1589 */
+  /* ./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;
@@ -7045,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 = 1593;
+  fra.me.line = 1616;
   fra.me.meth = LOCATE_parser___ReduceAction22___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -7059,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:1595 */
+  /* ./parser//parser.nit:1618 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1596 */
+  /* ./parser//parser.nit:1619 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1597 */
+  /* ./parser//parser.nit:1620 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1598 */
+  /* ./parser//parser.nit:1621 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1599 */
+  /* ./parser//parser.nit:1622 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1600 */
+  /* ./parser//parser.nit:1623 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1602 */
+  /* ./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, 1602);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1625);
   }
-  /* ./parser//parser.nit:1603 */
+  /* ./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:1605 */
+  /* ./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, 1605);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1628);
   }
-  /* ./parser//parser.nit:1607 */
+  /* ./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, 1607);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1630);
   }
-  /* ./parser//parser.nit:1608 */
+  /* ./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:1609 */
+  /* ./parser//parser.nit:1632 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7110,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:1610 */
+    /* ./parser//parser.nit:1633 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1612 */
+  /* ./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:1617 */
+  /* ./parser//parser.nit:1640 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1618 */
+  /* ./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, 1618);
+    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);
@@ -7137,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 = 1621;
+  fra.me.line = 1644;
   fra.me.meth = LOCATE_parser___ReduceAction22___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7145,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:1621 */
+  /* ./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;
@@ -7160,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 = 1625;
+  fra.me.line = 1648;
   fra.me.meth = LOCATE_parser___ReduceAction23___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -7175,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:1627 */
+  /* ./parser//parser.nit:1650 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1628 */
+  /* ./parser//parser.nit:1651 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1629 */
+  /* ./parser//parser.nit:1652 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1630 */
+  /* ./parser//parser.nit:1653 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1631 */
+  /* ./parser//parser.nit:1654 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1632 */
+  /* ./parser//parser.nit:1655 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1633 */
+  /* ./parser//parser.nit:1656 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1635 */
+  /* ./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, 1635);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1658);
   }
-  /* ./parser//parser.nit:1637 */
+  /* ./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, 1637);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1660);
   }
-  /* ./parser//parser.nit:1638 */
+  /* ./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:1640 */
+  /* ./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, 1640);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1663);
   }
-  /* ./parser//parser.nit:1642 */
+  /* ./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, 1642);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1665);
   }
-  /* ./parser//parser.nit:1643 */
+  /* ./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:1644 */
+  /* ./parser//parser.nit:1667 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7234,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:1645 */
+    /* ./parser//parser.nit:1668 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1647 */
+  /* ./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:1652 */
+  /* ./parser//parser.nit:1675 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1653 */
+  /* ./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, 1653);
+    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);
@@ -7261,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 = 1656;
+  fra.me.line = 1679;
   fra.me.meth = LOCATE_parser___ReduceAction23___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7269,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:1656 */
+  /* ./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;
@@ -7284,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 = 1660;
+  fra.me.line = 1683;
   fra.me.meth = LOCATE_parser___ReduceAction24___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -7298,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:1662 */
+  /* ./parser//parser.nit:1685 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1663 */
+  /* ./parser//parser.nit:1686 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1664 */
+  /* ./parser//parser.nit:1687 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1665 */
+  /* ./parser//parser.nit:1688 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1666 */
+  /* ./parser//parser.nit:1689 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1667 */
+  /* ./parser//parser.nit:1690 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1669 */
+  /* ./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, 1669);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1692);
   }
-  /* ./parser//parser.nit:1670 */
+  /* ./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:1671 */
+  /* ./parser//parser.nit:1694 */
   fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* ./parser//parser.nit:1675 */
+  /* ./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, 1675);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1698);
   }
-  /* ./parser//parser.nit:1676 */
+  /* ./parser//parser.nit:1699 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7342,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:1677 */
+    /* ./parser//parser.nit:1700 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  /* ./parser//parser.nit:1679 */
+  /* ./parser//parser.nit:1702 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7360,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:1680 */
+    /* ./parser//parser.nit:1703 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1682 */
+  /* ./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:1687 */
+  /* ./parser//parser.nit:1710 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1688 */
+  /* ./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, 1688);
+    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);
@@ -7387,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 = 1691;
+  fra.me.line = 1714;
   fra.me.meth = LOCATE_parser___ReduceAction24___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7395,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:1691 */
+  /* ./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;
@@ -7410,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 = 1695;
+  fra.me.line = 1718;
   fra.me.meth = LOCATE_parser___ReduceAction25___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -7425,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:1697 */
+  /* ./parser//parser.nit:1720 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1698 */
+  /* ./parser//parser.nit:1721 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1699 */
+  /* ./parser//parser.nit:1722 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1700 */
+  /* ./parser//parser.nit:1723 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1701 */
+  /* ./parser//parser.nit:1724 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1702 */
+  /* ./parser//parser.nit:1725 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1704 */
+  /* ./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, 1704);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1727);
   }
-  /* ./parser//parser.nit:1705 */
+  /* ./parser//parser.nit:1728 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1707 */
+  /* ./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, 1707);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1730);
   }
-  /* ./parser//parser.nit:1708 */
+  /* ./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:1709 */
+  /* ./parser//parser.nit:1732 */
   fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* ./parser//parser.nit:1713 */
+  /* ./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, 1713);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1736);
   }
-  /* ./parser//parser.nit:1714 */
+  /* ./parser//parser.nit:1737 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7477,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:1715 */
+    /* ./parser//parser.nit:1738 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  /* ./parser//parser.nit:1717 */
+  /* ./parser//parser.nit:1740 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7495,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:1718 */
+    /* ./parser//parser.nit:1741 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1720 */
+  /* ./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:1725 */
+  /* ./parser//parser.nit:1748 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1726 */
+  /* ./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, 1726);
+    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);
@@ -7522,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 = 1729;
+  fra.me.line = 1752;
   fra.me.meth = LOCATE_parser___ReduceAction25___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7530,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:1729 */
+  /* ./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;
@@ -7545,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 = 1733;
+  fra.me.line = 1756;
   fra.me.meth = LOCATE_parser___ReduceAction26___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -7559,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:1735 */
+  /* ./parser//parser.nit:1758 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1736 */
+  /* ./parser//parser.nit:1759 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1737 */
+  /* ./parser//parser.nit:1760 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1738 */
+  /* ./parser//parser.nit:1761 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1739 */
+  /* ./parser//parser.nit:1762 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1740 */
+  /* ./parser//parser.nit:1763 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1742 */
+  /* ./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, 1742);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1765);
   }
-  /* ./parser//parser.nit:1743 */
+  /* ./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:1744 */
+  /* ./parser//parser.nit:1767 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1746 */
+  /* ./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, 1746);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1769);
   }
-  /* ./parser//parser.nit:1747 */
+  /* ./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:1748 */
+  /* ./parser//parser.nit:1771 */
   fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1752 */
+  /* ./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, 1752);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1775);
   }
-  /* ./parser//parser.nit:1753 */
+  /* ./parser//parser.nit:1776 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7614,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:1754 */
+    /* ./parser//parser.nit:1777 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1756 */
+  /* ./parser//parser.nit:1779 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7632,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:1757 */
+    /* ./parser//parser.nit:1780 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1759 */
+  /* ./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:1764 */
+  /* ./parser//parser.nit:1787 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1765 */
+  /* ./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, 1765);
+    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);
@@ -7659,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 = 1768;
+  fra.me.line = 1791;
   fra.me.meth = LOCATE_parser___ReduceAction26___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7667,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:1768 */
+  /* ./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;
@@ -7682,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 = 1772;
+  fra.me.line = 1795;
   fra.me.meth = LOCATE_parser___ReduceAction27___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -7697,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:1774 */
+  /* ./parser//parser.nit:1797 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1775 */
+  /* ./parser//parser.nit:1798 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1776 */
+  /* ./parser//parser.nit:1799 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1777 */
+  /* ./parser//parser.nit:1800 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1778 */
+  /* ./parser//parser.nit:1801 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1779 */
+  /* ./parser//parser.nit:1802 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1780 */
+  /* ./parser//parser.nit:1803 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1782 */
+  /* ./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, 1782);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1805);
   }
-  /* ./parser//parser.nit:1784 */
+  /* ./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, 1784);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1807);
   }
-  /* ./parser//parser.nit:1785 */
+  /* ./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:1786 */
+  /* ./parser//parser.nit:1809 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1788 */
+  /* ./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, 1788);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1811);
   }
-  /* ./parser//parser.nit:1789 */
+  /* ./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:1790 */
+  /* ./parser//parser.nit:1813 */
   fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1794 */
+  /* ./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, 1794);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1817);
   }
-  /* ./parser//parser.nit:1795 */
+  /* ./parser//parser.nit:1818 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7760,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:1796 */
+    /* ./parser//parser.nit:1819 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1798 */
+  /* ./parser//parser.nit:1821 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7778,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:1799 */
+    /* ./parser//parser.nit:1822 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1801 */
+  /* ./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:1806 */
+  /* ./parser//parser.nit:1829 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1807 */
+  /* ./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, 1807);
+    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);
@@ -7805,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 = 1810;
+  fra.me.line = 1833;
   fra.me.meth = LOCATE_parser___ReduceAction27___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7813,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:1810 */
+  /* ./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;
@@ -7828,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 = 1814;
+  fra.me.line = 1837;
   fra.me.meth = LOCATE_parser___ReduceAction28___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -7843,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:1816 */
+  /* ./parser//parser.nit:1839 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1817 */
+  /* ./parser//parser.nit:1840 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1818 */
+  /* ./parser//parser.nit:1841 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1819 */
+  /* ./parser//parser.nit:1842 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1820 */
+  /* ./parser//parser.nit:1843 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1821 */
+  /* ./parser//parser.nit:1844 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1823 */
+  /* ./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, 1823);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1846);
   }
-  /* ./parser//parser.nit:1824 */
+  /* ./parser//parser.nit:1847 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1826 */
+  /* ./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, 1826);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1849);
   }
-  /* ./parser//parser.nit:1827 */
+  /* ./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:1828 */
+  /* ./parser//parser.nit:1851 */
   fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* ./parser//parser.nit:1832 */
+  /* ./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, 1832);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1855);
   }
-  /* ./parser//parser.nit:1833 */
+  /* ./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:1834 */
+  /* ./parser//parser.nit:1857 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7898,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:1835 */
+    /* ./parser//parser.nit:1858 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  /* ./parser//parser.nit:1837 */
+  /* ./parser//parser.nit:1860 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7916,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:1838 */
+    /* ./parser//parser.nit:1861 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1840 */
+  /* ./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:1845 */
+  /* ./parser//parser.nit:1868 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1846 */
+  /* ./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, 1846);
+    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);
@@ -7943,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 = 1849;
+  fra.me.line = 1872;
   fra.me.meth = LOCATE_parser___ReduceAction28___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7951,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:1849 */
+  /* ./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;
@@ -7966,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 = 1853;
+  fra.me.line = 1876;
   fra.me.meth = LOCATE_parser___ReduceAction29___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -7982,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:1855 */
+  /* ./parser//parser.nit:1878 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1856 */
+  /* ./parser//parser.nit:1879 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1857 */
+  /* ./parser//parser.nit:1880 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1858 */
+  /* ./parser//parser.nit:1881 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1859 */
+  /* ./parser//parser.nit:1882 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1860 */
+  /* ./parser//parser.nit:1883 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1861 */
+  /* ./parser//parser.nit:1884 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1863 */
+  /* ./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, 1863);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1886);
   }
-  /* ./parser//parser.nit:1865 */
+  /* ./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, 1865);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1888);
   }
-  /* ./parser//parser.nit:1866 */
+  /* ./parser//parser.nit:1889 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1868 */
+  /* ./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, 1868);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1891);
   }
-  /* ./parser//parser.nit:1869 */
+  /* ./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:1870 */
+  /* ./parser//parser.nit:1893 */
   fra.me.REG[9] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
-  /* ./parser//parser.nit:1874 */
+  /* ./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, 1874);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1897);
   }
-  /* ./parser//parser.nit:1875 */
+  /* ./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:1876 */
+  /* ./parser//parser.nit:1899 */
   REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8045,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:1877 */
+    /* ./parser//parser.nit:1900 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
   }
-  /* ./parser//parser.nit:1879 */
+  /* ./parser//parser.nit:1902 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8063,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:1880 */
+    /* ./parser//parser.nit:1903 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1882 */
+  /* ./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:1887 */
+  /* ./parser//parser.nit:1910 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1888 */
+  /* ./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, 1888);
+    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);
@@ -8090,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 = 1891;
+  fra.me.line = 1914;
   fra.me.meth = LOCATE_parser___ReduceAction29___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8098,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:1891 */
+  /* ./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;
@@ -8113,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 = 1895;
+  fra.me.line = 1918;
   fra.me.meth = LOCATE_parser___ReduceAction30___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -8128,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:1897 */
+  /* ./parser//parser.nit:1920 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1898 */
+  /* ./parser//parser.nit:1921 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1899 */
+  /* ./parser//parser.nit:1922 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1900 */
+  /* ./parser//parser.nit:1923 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1901 */
+  /* ./parser//parser.nit:1924 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1902 */
+  /* ./parser//parser.nit:1925 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1903 */
+  /* ./parser//parser.nit:1926 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1905 */
+  /* ./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, 1905);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1928);
   }
-  /* ./parser//parser.nit:1906 */
+  /* ./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:1908 */
+  /* ./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, 1908);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1931);
   }
-  /* ./parser//parser.nit:1909 */
+  /* ./parser//parser.nit:1932 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1911 */
+  /* ./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, 1911);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1934);
   }
-  /* ./parser//parser.nit:1912 */
+  /* ./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:1913 */
+  /* ./parser//parser.nit:1936 */
   fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* ./parser//parser.nit:1917 */
+  /* ./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, 1917);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1940);
   }
-  /* ./parser//parser.nit:1918 */
+  /* ./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:1919 */
+  /* ./parser//parser.nit:1942 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8194,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:1920 */
+    /* ./parser//parser.nit:1943 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[6]);
   }
-  /* ./parser//parser.nit:1922 */
+  /* ./parser//parser.nit:1945 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8212,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:1923 */
+    /* ./parser//parser.nit:1946 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1925 */
+  /* ./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:1930 */
+  /* ./parser//parser.nit:1953 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1931 */
+  /* ./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, 1931);
+    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);
@@ -8239,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 = 1934;
+  fra.me.line = 1957;
   fra.me.meth = LOCATE_parser___ReduceAction30___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8247,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:1934 */
+  /* ./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;
@@ -8262,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 = 1938;
+  fra.me.line = 1961;
   fra.me.meth = LOCATE_parser___ReduceAction31___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -8278,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:1940 */
+  /* ./parser//parser.nit:1963 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1941 */
+  /* ./parser//parser.nit:1964 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1942 */
+  /* ./parser//parser.nit:1965 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1943 */
+  /* ./parser//parser.nit:1966 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1944 */
+  /* ./parser//parser.nit:1967 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1945 */
+  /* ./parser//parser.nit:1968 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1946 */
+  /* ./parser//parser.nit:1969 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1947 */
+  /* ./parser//parser.nit:1970 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1949 */
+  /* ./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, 1949);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1972);
   }
-  /* ./parser//parser.nit:1951 */
+  /* ./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, 1951);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1974);
   }
-  /* ./parser//parser.nit:1952 */
+  /* ./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:1954 */
+  /* ./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, 1954);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1977);
   }
-  /* ./parser//parser.nit:1955 */
+  /* ./parser//parser.nit:1978 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1957 */
+  /* ./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, 1957);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1980);
   }
-  /* ./parser//parser.nit:1958 */
+  /* ./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:1959 */
+  /* ./parser//parser.nit:1982 */
   fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* ./parser//parser.nit:1963 */
+  /* ./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, 1963);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1986);
   }
-  /* ./parser//parser.nit:1964 */
+  /* ./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:1965 */
+  /* ./parser//parser.nit:1988 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8352,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:1966 */
+    /* ./parser//parser.nit:1989 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[6]);
   }
-  /* ./parser//parser.nit:1968 */
+  /* ./parser//parser.nit:1991 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8370,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:1969 */
+    /* ./parser//parser.nit:1992 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1971 */
+  /* ./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:1976 */
+  /* ./parser//parser.nit:1999 */
   fra.me.REG[2] = fra.me.REG[9];
-  /* ./parser//parser.nit:1977 */
+  /* ./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, 1977);
+    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);
@@ -8397,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 = 1980;
+  fra.me.line = 2003;
   fra.me.meth = LOCATE_parser___ReduceAction31___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8405,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:1980 */
+  /* ./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;
@@ -8419,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 = 1984;
+  fra.me.line = 2007;
   fra.me.meth = LOCATE_parser___ReduceAction32___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -8431,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:1986 */
+  /* ./parser//parser.nit:2009 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1987 */
+  /* ./parser//parser.nit:2010 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1988 */
+  /* ./parser//parser.nit:2011 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1989 */
+  /* ./parser//parser.nit:2012 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1990 */
+  /* ./parser//parser.nit:2013 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1991 */
+  /* ./parser//parser.nit:2014 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1993 */
+  /* ./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, 1993);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2016);
   }
-  /* ./parser//parser.nit:1995 */
+  /* ./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, 1995);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2018);
   }
-  /* ./parser//parser.nit:1997 */
+  /* ./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, 1997);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2020);
   }
-  /* ./parser//parser.nit:1998 */
+  /* ./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:2003 */
+  /* ./parser//parser.nit:2026 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2004 */
+  /* ./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, 2004);
+    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);
@@ -8485,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 = 2007;
+  fra.me.line = 2030;
   fra.me.meth = LOCATE_parser___ReduceAction32___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8493,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:2007 */
+  /* ./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;
@@ -8507,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 = 2011;
+  fra.me.line = 2034;
   fra.me.meth = LOCATE_parser___ReduceAction33___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -8520,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:2013 */
+  /* ./parser//parser.nit:2036 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2014 */
+  /* ./parser//parser.nit:2037 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2015 */
+  /* ./parser//parser.nit:2038 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2016 */
+  /* ./parser//parser.nit:2039 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2017 */
+  /* ./parser//parser.nit:2040 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2018 */
+  /* ./parser//parser.nit:2041 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2019 */
+  /* ./parser//parser.nit:2042 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2021 */
+  /* ./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, 2021);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2044);
   }
-  /* ./parser//parser.nit:2023 */
+  /* ./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, 2023);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2046);
   }
-  /* ./parser//parser.nit:2025 */
+  /* ./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, 2025);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2048);
   }
-  /* ./parser//parser.nit:2026 */
+  /* ./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:2031 */
+  /* ./parser//parser.nit:2054 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2032 */
+  /* ./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, 2032);
+    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);
@@ -8576,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 = 2035;
+  fra.me.line = 2058;
   fra.me.meth = LOCATE_parser___ReduceAction33___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8584,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:2035 */
+  /* ./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;
@@ -8598,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 = 2039;
+  fra.me.line = 2062;
   fra.me.meth = LOCATE_parser___ReduceAction34___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -8611,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:2041 */
+  /* ./parser//parser.nit:2064 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2042 */
+  /* ./parser//parser.nit:2065 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2043 */
+  /* ./parser//parser.nit:2066 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2044 */
+  /* ./parser//parser.nit:2067 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2045 */
+  /* ./parser//parser.nit:2068 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2046 */
+  /* ./parser//parser.nit:2069 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2047 */
+  /* ./parser//parser.nit:2070 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2049 */
+  /* ./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, 2049);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2072);
   }
-  /* ./parser//parser.nit:2051 */
+  /* ./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, 2051);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2074);
   }
-  /* ./parser//parser.nit:2053 */
+  /* ./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, 2053);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2076);
   }
-  /* ./parser//parser.nit:2054 */
+  /* ./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:2059 */
+  /* ./parser//parser.nit:2082 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2060 */
+  /* ./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, 2060);
+    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);
@@ -8667,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 = 2063;
+  fra.me.line = 2086;
   fra.me.meth = LOCATE_parser___ReduceAction34___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8675,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:2063 */
+  /* ./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;
@@ -8690,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 = 2067;
+  fra.me.line = 2090;
   fra.me.meth = LOCATE_parser___ReduceAction35___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -8701,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:2069 */
+  /* ./parser//parser.nit:2092 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2070 */
+  /* ./parser//parser.nit:2093 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2071 */
+  /* ./parser//parser.nit:2094 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2073 */
+  /* ./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, 2073);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2096);
   }
-  /* ./parser//parser.nit:2074 */
+  /* ./parser//parser.nit:2097 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8728,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:2075 */
+    /* ./parser//parser.nit:2098 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:2077 */
+  /* ./parser//parser.nit:2100 */
   fra.me.REG[4] = NEW_AMainClassdef_parser_prod___AMainClassdef___init_amainclassdef(fra.me.REG[4]);
-  /* ./parser//parser.nit:2080 */
+  /* ./parser//parser.nit:2103 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:2081 */
+  /* ./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, 2081);
+    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);
@@ -8755,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 = 2084;
+  fra.me.line = 2107;
   fra.me.meth = LOCATE_parser___ReduceAction35___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8763,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:2084 */
+  /* ./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;
@@ -8777,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 = 2088;
+  fra.me.line = 2111;
   fra.me.meth = LOCATE_parser___ReduceAction36___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -8787,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:2090 */
+  /* ./parser//parser.nit:2113 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2091 */
+  /* ./parser//parser.nit:2114 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2092 */
+  /* ./parser//parser.nit:2115 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2093 */
+  /* ./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, 2093);
+    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);
@@ -8813,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 = 2096;
+  fra.me.line = 2119;
   fra.me.meth = LOCATE_parser___ReduceAction36___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8821,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:2096 */
+  /* ./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;
@@ -8835,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 = 2100;
+  fra.me.line = 2123;
   fra.me.meth = LOCATE_parser___ReduceAction37___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -8846,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:2102 */
+  /* ./parser//parser.nit:2125 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2103 */
+  /* ./parser//parser.nit:2126 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2104 */
+  /* ./parser//parser.nit:2127 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2106 */
+  /* ./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, 2106);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2129);
   }
-  /* ./parser//parser.nit:2107 */
+  /* ./parser//parser.nit:2130 */
   fra.me.REG[3] = NEW_AMainMethPropdef_parser_prod___AMainMethPropdef___init_amainmethpropdef(NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:2111 */
+  /* ./parser//parser.nit:2134 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2112 */
+  /* ./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, 2112);
+    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);
@@ -8882,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 = 2115;
+  fra.me.line = 2138;
   fra.me.meth = LOCATE_parser___ReduceAction37___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8890,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:2115 */
+  /* ./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;
@@ -8904,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 = 2119;
+  fra.me.line = 2142;
   fra.me.meth = LOCATE_parser___ReduceAction39___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -8920,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:2121 */
+  /* ./parser//parser.nit:2144 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2122 */
+  /* ./parser//parser.nit:2145 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2123 */
+  /* ./parser//parser.nit:2146 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2124 */
+  /* ./parser//parser.nit:2147 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2125 */
+  /* ./parser//parser.nit:2148 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2126 */
+  /* ./parser//parser.nit:2149 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2127 */
+  /* ./parser//parser.nit:2150 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2128 */
+  /* ./parser//parser.nit:2151 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2129 */
+  /* ./parser//parser.nit:2152 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2130 */
+  /* ./parser//parser.nit:2153 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2131 */
+  /* ./parser//parser.nit:2154 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2133 */
+  /* ./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, 2133);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2156);
   }
-  /* ./parser//parser.nit:2135 */
+  /* ./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, 2135);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2158);
   }
-  /* ./parser//parser.nit:2137 */
+  /* ./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, 2137);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2160);
   }
-  /* ./parser//parser.nit:2139 */
+  /* ./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, 2139);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2162);
   }
-  /* ./parser//parser.nit:2140 */
+  /* ./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:2150 */
+  /* ./parser//parser.nit:2173 */
   fra.me.REG[2] = fra.me.REG[9];
-  /* ./parser//parser.nit:2151 */
+  /* ./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, 2151);
+    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);
@@ -8990,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 = 2154;
+  fra.me.line = 2177;
   fra.me.meth = LOCATE_parser___ReduceAction39___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8998,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:2154 */
+  /* ./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;
@@ -9012,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 = 2158;
+  fra.me.line = 2181;
   fra.me.meth = LOCATE_parser___ReduceAction40___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -9029,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:2160 */
+  /* ./parser//parser.nit:2183 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2161 */
+  /* ./parser//parser.nit:2184 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2162 */
+  /* ./parser//parser.nit:2185 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2163 */
+  /* ./parser//parser.nit:2186 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2164 */
+  /* ./parser//parser.nit:2187 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2165 */
+  /* ./parser//parser.nit:2188 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2166 */
+  /* ./parser//parser.nit:2189 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2167 */
+  /* ./parser//parser.nit:2190 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2168 */
+  /* ./parser//parser.nit:2191 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2169 */
+  /* ./parser//parser.nit:2192 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2170 */
+  /* ./parser//parser.nit:2193 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2171 */
+  /* ./parser//parser.nit:2194 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2173 */
+  /* ./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, 2173);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2196);
   }
-  /* ./parser//parser.nit:2175 */
+  /* ./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, 2175);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2198);
   }
-  /* ./parser//parser.nit:2177 */
+  /* ./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, 2177);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2200);
   }
-  /* ./parser//parser.nit:2179 */
+  /* ./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, 2179);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2202);
   }
-  /* ./parser//parser.nit:2181 */
+  /* ./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, 2181);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2204);
   }
-  /* ./parser//parser.nit:2182 */
+  /* ./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:2192 */
+  /* ./parser//parser.nit:2215 */
   fra.me.REG[2] = fra.me.REG[10];
-  /* ./parser//parser.nit:2193 */
+  /* ./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, 2193);
+    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);
@@ -9107,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 = 2196;
+  fra.me.line = 2219;
   fra.me.meth = LOCATE_parser___ReduceAction40___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9115,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:2196 */
+  /* ./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;
@@ -9129,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 = 2200;
+  fra.me.line = 2223;
   fra.me.meth = LOCATE_parser___ReduceAction41___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -9146,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:2202 */
+  /* ./parser//parser.nit:2225 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2203 */
+  /* ./parser//parser.nit:2226 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2204 */
+  /* ./parser//parser.nit:2227 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2205 */
+  /* ./parser//parser.nit:2228 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2206 */
+  /* ./parser//parser.nit:2229 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2207 */
+  /* ./parser//parser.nit:2230 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2208 */
+  /* ./parser//parser.nit:2231 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2209 */
+  /* ./parser//parser.nit:2232 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2210 */
+  /* ./parser//parser.nit:2233 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2211 */
+  /* ./parser//parser.nit:2234 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2212 */
+  /* ./parser//parser.nit:2235 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2213 */
+  /* ./parser//parser.nit:2236 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2215 */
+  /* ./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, 2215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2238);
   }
-  /* ./parser//parser.nit:2217 */
+  /* ./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, 2217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2240);
   }
-  /* ./parser//parser.nit:2219 */
+  /* ./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, 2219);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2242);
   }
-  /* ./parser//parser.nit:2221 */
+  /* ./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, 2221);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2244);
   }
-  /* ./parser//parser.nit:2223 */
+  /* ./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, 2223);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2246);
   }
-  /* ./parser//parser.nit:2224 */
+  /* ./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:2225 */
+  /* ./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:2235 */
+  /* ./parser//parser.nit:2258 */
   fra.me.REG[2] = fra.me.REG[10];
-  /* ./parser//parser.nit:2236 */
+  /* ./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, 2236);
+    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);
@@ -9227,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 = 2239;
+  fra.me.line = 2262;
   fra.me.meth = LOCATE_parser___ReduceAction41___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9235,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:2239 */
+  /* ./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;
@@ -9249,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 = 2243;
+  fra.me.line = 2266;
   fra.me.meth = LOCATE_parser___ReduceAction42___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -9267,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:2245 */
+  /* ./parser//parser.nit:2268 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2246 */
+  /* ./parser//parser.nit:2269 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2247 */
+  /* ./parser//parser.nit:2270 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2248 */
+  /* ./parser//parser.nit:2271 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2249 */
+  /* ./parser//parser.nit:2272 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2250 */
+  /* ./parser//parser.nit:2273 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2251 */
+  /* ./parser//parser.nit:2274 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2252 */
+  /* ./parser//parser.nit:2275 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2253 */
+  /* ./parser//parser.nit:2276 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2254 */
+  /* ./parser//parser.nit:2277 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2255 */
+  /* ./parser//parser.nit:2278 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2256 */
+  /* ./parser//parser.nit:2279 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2257 */
+  /* ./parser//parser.nit:2280 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2259 */
+  /* ./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, 2259);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2282);
   }
-  /* ./parser//parser.nit:2261 */
+  /* ./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, 2261);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2284);
   }
-  /* ./parser//parser.nit:2263 */
+  /* ./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, 2263);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2286);
   }
-  /* ./parser//parser.nit:2265 */
+  /* ./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, 2265);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2288);
   }
-  /* ./parser//parser.nit:2267 */
+  /* ./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, 2267);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2290);
   }
-  /* ./parser//parser.nit:2269 */
+  /* ./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, 2269);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2292);
   }
-  /* ./parser//parser.nit:2270 */
+  /* ./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:2271 */
+  /* ./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:2281 */
+  /* ./parser//parser.nit:2304 */
   fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2282 */
+  /* ./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, 2282);
+    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);
@@ -9356,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 = 2285;
+  fra.me.line = 2308;
   fra.me.meth = LOCATE_parser___ReduceAction42___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9364,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:2285 */
+  /* ./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;
@@ -9378,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 = 2289;
+  fra.me.line = 2312;
   fra.me.meth = LOCATE_parser___ReduceAction43___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -9395,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:2291 */
+  /* ./parser//parser.nit:2314 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2292 */
+  /* ./parser//parser.nit:2315 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2293 */
+  /* ./parser//parser.nit:2316 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2294 */
+  /* ./parser//parser.nit:2317 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2295 */
+  /* ./parser//parser.nit:2318 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2296 */
+  /* ./parser//parser.nit:2319 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2297 */
+  /* ./parser//parser.nit:2320 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2298 */
+  /* ./parser//parser.nit:2321 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2299 */
+  /* ./parser//parser.nit:2322 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2300 */
+  /* ./parser//parser.nit:2323 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2301 */
+  /* ./parser//parser.nit:2324 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2302 */
+  /* ./parser//parser.nit:2325 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2304 */
+  /* ./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, 2304);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2327);
   }
-  /* ./parser//parser.nit:2306 */
+  /* ./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, 2306);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2329);
   }
-  /* ./parser//parser.nit:2308 */
+  /* ./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, 2308);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2331);
   }
-  /* ./parser//parser.nit:2310 */
+  /* ./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, 2310);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2333);
   }
-  /* ./parser//parser.nit:2312 */
+  /* ./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, 2312);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2335);
   }
-  /* ./parser//parser.nit:2313 */
+  /* ./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:2314 */
+  /* ./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:2324 */
+  /* ./parser//parser.nit:2347 */
   fra.me.REG[2] = fra.me.REG[10];
-  /* ./parser//parser.nit:2325 */
+  /* ./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, 2325);
+    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);
@@ -9476,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 = 2328;
+  fra.me.line = 2351;
   fra.me.meth = LOCATE_parser___ReduceAction43___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9484,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:2328 */
+  /* ./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;
@@ -9498,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 = 2332;
+  fra.me.line = 2355;
   fra.me.meth = LOCATE_parser___ReduceAction44___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -9516,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:2334 */
+  /* ./parser//parser.nit:2357 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2335 */
+  /* ./parser//parser.nit:2358 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2336 */
+  /* ./parser//parser.nit:2359 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2337 */
+  /* ./parser//parser.nit:2360 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2338 */
+  /* ./parser//parser.nit:2361 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2339 */
+  /* ./parser//parser.nit:2362 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2340 */
+  /* ./parser//parser.nit:2363 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2341 */
+  /* ./parser//parser.nit:2364 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2342 */
+  /* ./parser//parser.nit:2365 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2343 */
+  /* ./parser//parser.nit:2366 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2344 */
+  /* ./parser//parser.nit:2367 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2345 */
+  /* ./parser//parser.nit:2368 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2346 */
+  /* ./parser//parser.nit:2369 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2348 */
+  /* ./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, 2348);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2371);
   }
-  /* ./parser//parser.nit:2350 */
+  /* ./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, 2350);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2373);
   }
-  /* ./parser//parser.nit:2352 */
+  /* ./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, 2352);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2375);
   }
-  /* ./parser//parser.nit:2354 */
+  /* ./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, 2354);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2377);
   }
-  /* ./parser//parser.nit:2356 */
+  /* ./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, 2356);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2379);
   }
-  /* ./parser//parser.nit:2358 */
+  /* ./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, 2358);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2381);
   }
-  /* ./parser//parser.nit:2359 */
+  /* ./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:2360 */
+  /* ./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:2370 */
+  /* ./parser//parser.nit:2393 */
   fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2371 */
+  /* ./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, 2371);
+    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);
@@ -9605,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 = 2374;
+  fra.me.line = 2397;
   fra.me.meth = LOCATE_parser___ReduceAction44___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9613,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:2374 */
+  /* ./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;
@@ -9627,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 = 2378;
+  fra.me.line = 2401;
   fra.me.meth = LOCATE_parser___ReduceAction45___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -9645,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:2380 */
+  /* ./parser//parser.nit:2403 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2381 */
+  /* ./parser//parser.nit:2404 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2382 */
+  /* ./parser//parser.nit:2405 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2383 */
+  /* ./parser//parser.nit:2406 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2384 */
+  /* ./parser//parser.nit:2407 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2385 */
+  /* ./parser//parser.nit:2408 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2386 */
+  /* ./parser//parser.nit:2409 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2387 */
+  /* ./parser//parser.nit:2410 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2388 */
+  /* ./parser//parser.nit:2411 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2389 */
+  /* ./parser//parser.nit:2412 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2390 */
+  /* ./parser//parser.nit:2413 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2391 */
+  /* ./parser//parser.nit:2414 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2392 */
+  /* ./parser//parser.nit:2415 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2394 */
+  /* ./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, 2394);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2417);
   }
-  /* ./parser//parser.nit:2396 */
+  /* ./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, 2396);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2419);
   }
-  /* ./parser//parser.nit:2398 */
+  /* ./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, 2398);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2421);
   }
-  /* ./parser//parser.nit:2400 */
+  /* ./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, 2400);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2423);
   }
-  /* ./parser//parser.nit:2402 */
+  /* ./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, 2402);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2425);
   }
-  /* ./parser//parser.nit:2403 */
+  /* ./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:2405 */
+  /* ./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, 2405);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2428);
   }
-  /* ./parser//parser.nit:2406 */
+  /* ./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:2407 */
+  /* ./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:2417 */
+  /* ./parser//parser.nit:2440 */
   fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2418 */
+  /* ./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, 2418);
+    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);
@@ -9737,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 = 2421;
+  fra.me.line = 2444;
   fra.me.meth = LOCATE_parser___ReduceAction45___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9745,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:2421 */
+  /* ./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;
@@ -9759,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 = 2425;
+  fra.me.line = 2448;
   fra.me.meth = LOCATE_parser___ReduceAction46___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -9778,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:2427 */
+  /* ./parser//parser.nit:2450 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2428 */
+  /* ./parser//parser.nit:2451 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2429 */
+  /* ./parser//parser.nit:2452 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2430 */
+  /* ./parser//parser.nit:2453 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2431 */
+  /* ./parser//parser.nit:2454 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2432 */
+  /* ./parser//parser.nit:2455 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2433 */
+  /* ./parser//parser.nit:2456 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2434 */
+  /* ./parser//parser.nit:2457 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2435 */
+  /* ./parser//parser.nit:2458 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2436 */
+  /* ./parser//parser.nit:2459 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2437 */
+  /* ./parser//parser.nit:2460 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2438 */
+  /* ./parser//parser.nit:2461 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2439 */
+  /* ./parser//parser.nit:2462 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2440 */
+  /* ./parser//parser.nit:2463 */
   fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2442 */
+  /* ./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, 2442);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2465);
   }
-  /* ./parser//parser.nit:2444 */
+  /* ./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, 2444);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2467);
   }
-  /* ./parser//parser.nit:2446 */
+  /* ./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, 2446);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2469);
   }
-  /* ./parser//parser.nit:2448 */
+  /* ./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, 2448);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2471);
   }
-  /* ./parser//parser.nit:2450 */
+  /* ./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, 2450);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2473);
   }
-  /* ./parser//parser.nit:2452 */
+  /* ./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, 2452);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2475);
   }
-  /* ./parser//parser.nit:2453 */
+  /* ./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:2455 */
+  /* ./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, 2455);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2478);
   }
-  /* ./parser//parser.nit:2456 */
+  /* ./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:2457 */
+  /* ./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:2467 */
+  /* ./parser//parser.nit:2490 */
   fra.me.REG[2] = fra.me.REG[12];
-  /* ./parser//parser.nit:2468 */
+  /* ./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, 2468);
+    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);
@@ -9878,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 = 2471;
+  fra.me.line = 2494;
   fra.me.meth = LOCATE_parser___ReduceAction46___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9886,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:2471 */
+  /* ./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;
@@ -9900,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 = 2475;
+  fra.me.line = 2498;
   fra.me.meth = LOCATE_parser___ReduceAction47___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -9917,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:2477 */
+  /* ./parser//parser.nit:2500 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2478 */
+  /* ./parser//parser.nit:2501 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2479 */
+  /* ./parser//parser.nit:2502 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2480 */
+  /* ./parser//parser.nit:2503 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2481 */
+  /* ./parser//parser.nit:2504 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2482 */
+  /* ./parser//parser.nit:2505 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2483 */
+  /* ./parser//parser.nit:2506 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2484 */
+  /* ./parser//parser.nit:2507 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2485 */
+  /* ./parser//parser.nit:2508 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2486 */
+  /* ./parser//parser.nit:2509 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2487 */
+  /* ./parser//parser.nit:2510 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2488 */
+  /* ./parser//parser.nit:2511 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2490 */
+  /* ./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, 2490);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2513);
   }
-  /* ./parser//parser.nit:2492 */
+  /* ./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, 2492);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2515);
   }
-  /* ./parser//parser.nit:2494 */
+  /* ./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, 2494);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2517);
   }
-  /* ./parser//parser.nit:2496 */
+  /* ./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, 2496);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2519);
   }
-  /* ./parser//parser.nit:2498 */
+  /* ./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, 2498);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2521);
   }
-  /* ./parser//parser.nit:2499 */
+  /* ./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:2500 */
+  /* ./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:2510 */
+  /* ./parser//parser.nit:2533 */
   fra.me.REG[2] = fra.me.REG[10];
-  /* ./parser//parser.nit:2511 */
+  /* ./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, 2511);
+    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);
@@ -9998,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 = 2514;
+  fra.me.line = 2537;
   fra.me.meth = LOCATE_parser___ReduceAction47___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10006,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:2514 */
+  /* ./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;
@@ -10020,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 = 2518;
+  fra.me.line = 2541;
   fra.me.meth = LOCATE_parser___ReduceAction48___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -10038,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:2520 */
+  /* ./parser//parser.nit:2543 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2521 */
+  /* ./parser//parser.nit:2544 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2522 */
+  /* ./parser//parser.nit:2545 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2523 */
+  /* ./parser//parser.nit:2546 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2524 */
+  /* ./parser//parser.nit:2547 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2525 */
+  /* ./parser//parser.nit:2548 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2526 */
+  /* ./parser//parser.nit:2549 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2527 */
+  /* ./parser//parser.nit:2550 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2528 */
+  /* ./parser//parser.nit:2551 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2529 */
+  /* ./parser//parser.nit:2552 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2530 */
+  /* ./parser//parser.nit:2553 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2531 */
+  /* ./parser//parser.nit:2554 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2532 */
+  /* ./parser//parser.nit:2555 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2534 */
+  /* ./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, 2534);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2557);
   }
-  /* ./parser//parser.nit:2536 */
+  /* ./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, 2536);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2559);
   }
-  /* ./parser//parser.nit:2538 */
+  /* ./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, 2538);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2561);
   }
-  /* ./parser//parser.nit:2540 */
+  /* ./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, 2540);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2563);
   }
-  /* ./parser//parser.nit:2542 */
+  /* ./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, 2542);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2565);
   }
-  /* ./parser//parser.nit:2544 */
+  /* ./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, 2544);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2567);
   }
-  /* ./parser//parser.nit:2545 */
+  /* ./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:2546 */
+  /* ./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:2556 */
+  /* ./parser//parser.nit:2579 */
   fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2557 */
+  /* ./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, 2557);
+    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);
@@ -10127,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 = 2560;
+  fra.me.line = 2583;
   fra.me.meth = LOCATE_parser___ReduceAction48___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10135,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:2560 */
+  /* ./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;
@@ -10149,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 = 2564;
+  fra.me.line = 2587;
   fra.me.meth = LOCATE_parser___ReduceAction49___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -10167,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:2566 */
+  /* ./parser//parser.nit:2589 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2567 */
+  /* ./parser//parser.nit:2590 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2568 */
+  /* ./parser//parser.nit:2591 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2569 */
+  /* ./parser//parser.nit:2592 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2570 */
+  /* ./parser//parser.nit:2593 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2571 */
+  /* ./parser//parser.nit:2594 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2572 */
+  /* ./parser//parser.nit:2595 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2573 */
+  /* ./parser//parser.nit:2596 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2574 */
+  /* ./parser//parser.nit:2597 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2575 */
+  /* ./parser//parser.nit:2598 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2576 */
+  /* ./parser//parser.nit:2599 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2577 */
+  /* ./parser//parser.nit:2600 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2578 */
+  /* ./parser//parser.nit:2601 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2580 */
+  /* ./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, 2580);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2603);
   }
-  /* ./parser//parser.nit:2582 */
+  /* ./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, 2582);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2605);
   }
-  /* ./parser//parser.nit:2584 */
+  /* ./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, 2584);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2607);
   }
-  /* ./parser//parser.nit:2586 */
+  /* ./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, 2586);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2609);
   }
-  /* ./parser//parser.nit:2588 */
+  /* ./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, 2588);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2611);
   }
-  /* ./parser//parser.nit:2589 */
+  /* ./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:2591 */
+  /* ./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, 2591);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2614);
   }
-  /* ./parser//parser.nit:2592 */
+  /* ./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:2593 */
+  /* ./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:2603 */
+  /* ./parser//parser.nit:2626 */
   fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2604 */
+  /* ./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, 2604);
+    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);
@@ -10259,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 = 2607;
+  fra.me.line = 2630;
   fra.me.meth = LOCATE_parser___ReduceAction49___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10267,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:2607 */
+  /* ./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;
@@ -10281,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 = 2611;
+  fra.me.line = 2634;
   fra.me.meth = LOCATE_parser___ReduceAction50___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -10300,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:2613 */
+  /* ./parser//parser.nit:2636 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2614 */
+  /* ./parser//parser.nit:2637 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2615 */
+  /* ./parser//parser.nit:2638 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2616 */
+  /* ./parser//parser.nit:2639 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2617 */
+  /* ./parser//parser.nit:2640 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2618 */
+  /* ./parser//parser.nit:2641 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2619 */
+  /* ./parser//parser.nit:2642 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2620 */
+  /* ./parser//parser.nit:2643 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2621 */
+  /* ./parser//parser.nit:2644 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2622 */
+  /* ./parser//parser.nit:2645 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2623 */
+  /* ./parser//parser.nit:2646 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2624 */
+  /* ./parser//parser.nit:2647 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2625 */
+  /* ./parser//parser.nit:2648 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2626 */
+  /* ./parser//parser.nit:2649 */
   fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2628 */
+  /* ./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, 2628);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2651);
   }
-  /* ./parser//parser.nit:2630 */
+  /* ./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, 2630);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2653);
   }
-  /* ./parser//parser.nit:2632 */
+  /* ./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, 2632);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2655);
   }
-  /* ./parser//parser.nit:2634 */
+  /* ./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, 2634);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2657);
   }
-  /* ./parser//parser.nit:2636 */
+  /* ./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, 2636);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2659);
   }
-  /* ./parser//parser.nit:2638 */
+  /* ./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, 2638);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2661);
   }
-  /* ./parser//parser.nit:2639 */
+  /* ./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:2641 */
+  /* ./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, 2641);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2664);
   }
-  /* ./parser//parser.nit:2642 */
+  /* ./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:2643 */
+  /* ./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:2653 */
+  /* ./parser//parser.nit:2676 */
   fra.me.REG[2] = fra.me.REG[12];
-  /* ./parser//parser.nit:2654 */
+  /* ./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, 2654);
+    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);
@@ -10400,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 = 2657;
+  fra.me.line = 2680;
   fra.me.meth = LOCATE_parser___ReduceAction50___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10408,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:2657 */
+  /* ./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;
@@ -10422,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 = 2661;
+  fra.me.line = 2684;
   fra.me.meth = LOCATE_parser___ReduceAction51___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -10440,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:2663 */
+  /* ./parser//parser.nit:2686 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2664 */
+  /* ./parser//parser.nit:2687 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2665 */
+  /* ./parser//parser.nit:2688 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2666 */
+  /* ./parser//parser.nit:2689 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2667 */
+  /* ./parser//parser.nit:2690 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2668 */
+  /* ./parser//parser.nit:2691 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2669 */
+  /* ./parser//parser.nit:2692 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2670 */
+  /* ./parser//parser.nit:2693 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2671 */
+  /* ./parser//parser.nit:2694 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2672 */
+  /* ./parser//parser.nit:2695 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2673 */
+  /* ./parser//parser.nit:2696 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2674 */
+  /* ./parser//parser.nit:2697 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2675 */
+  /* ./parser//parser.nit:2698 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2677 */
+  /* ./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, 2677);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2700);
   }
-  /* ./parser//parser.nit:2679 */
+  /* ./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, 2679);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2702);
   }
-  /* ./parser//parser.nit:2681 */
+  /* ./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, 2681);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2704);
   }
-  /* ./parser//parser.nit:2683 */
+  /* ./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, 2683);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2706);
   }
-  /* ./parser//parser.nit:2685 */
+  /* ./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, 2685);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2708);
   }
-  /* ./parser//parser.nit:2686 */
+  /* ./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:2688 */
+  /* ./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, 2688);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2711);
   }
-  /* ./parser//parser.nit:2689 */
+  /* ./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:2690 */
+  /* ./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:2700 */
+  /* ./parser//parser.nit:2723 */
   fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2701 */
+  /* ./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, 2701);
+    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);
@@ -10532,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 = 2704;
+  fra.me.line = 2727;
   fra.me.meth = LOCATE_parser___ReduceAction51___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10540,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:2704 */
+  /* ./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;
@@ -10554,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 = 2708;
+  fra.me.line = 2731;
   fra.me.meth = LOCATE_parser___ReduceAction52___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -10573,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:2710 */
+  /* ./parser//parser.nit:2733 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2711 */
+  /* ./parser//parser.nit:2734 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2712 */
+  /* ./parser//parser.nit:2735 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2713 */
+  /* ./parser//parser.nit:2736 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2714 */
+  /* ./parser//parser.nit:2737 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2715 */
+  /* ./parser//parser.nit:2738 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2716 */
+  /* ./parser//parser.nit:2739 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2717 */
+  /* ./parser//parser.nit:2740 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2718 */
+  /* ./parser//parser.nit:2741 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2719 */
+  /* ./parser//parser.nit:2742 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2720 */
+  /* ./parser//parser.nit:2743 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2721 */
+  /* ./parser//parser.nit:2744 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2722 */
+  /* ./parser//parser.nit:2745 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2723 */
+  /* ./parser//parser.nit:2746 */
   fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2725 */
+  /* ./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, 2725);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2748);
   }
-  /* ./parser//parser.nit:2727 */
+  /* ./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, 2727);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2750);
   }
-  /* ./parser//parser.nit:2729 */
+  /* ./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, 2729);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2752);
   }
-  /* ./parser//parser.nit:2731 */
+  /* ./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, 2731);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2754);
   }
-  /* ./parser//parser.nit:2733 */
+  /* ./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, 2733);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2756);
   }
-  /* ./parser//parser.nit:2735 */
+  /* ./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, 2735);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2758);
   }
-  /* ./parser//parser.nit:2736 */
+  /* ./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:2738 */
+  /* ./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, 2738);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2761);
   }
-  /* ./parser//parser.nit:2739 */
+  /* ./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:2740 */
+  /* ./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:2750 */
+  /* ./parser//parser.nit:2773 */
   fra.me.REG[2] = fra.me.REG[12];
-  /* ./parser//parser.nit:2751 */
+  /* ./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, 2751);
+    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);
@@ -10673,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 = 2754;
+  fra.me.line = 2777;
   fra.me.meth = LOCATE_parser___ReduceAction52___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10681,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:2754 */
+  /* ./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;
@@ -10695,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 = 2758;
+  fra.me.line = 2781;
   fra.me.meth = LOCATE_parser___ReduceAction53___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -10714,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:2760 */
+  /* ./parser//parser.nit:2783 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2761 */
+  /* ./parser//parser.nit:2784 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2762 */
+  /* ./parser//parser.nit:2785 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2763 */
+  /* ./parser//parser.nit:2786 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2764 */
+  /* ./parser//parser.nit:2787 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2765 */
+  /* ./parser//parser.nit:2788 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2766 */
+  /* ./parser//parser.nit:2789 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2767 */
+  /* ./parser//parser.nit:2790 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2768 */
+  /* ./parser//parser.nit:2791 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2769 */
+  /* ./parser//parser.nit:2792 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2770 */
+  /* ./parser//parser.nit:2793 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2771 */
+  /* ./parser//parser.nit:2794 */
   fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2772 */
+  /* ./parser//parser.nit:2795 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2773 */
+  /* ./parser//parser.nit:2796 */
   fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2775 */
+  /* ./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, 2775);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2798);
   }
-  /* ./parser//parser.nit:2777 */
+  /* ./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, 2777);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2800);
   }
-  /* ./parser//parser.nit:2779 */
+  /* ./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, 2779);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2802);
   }
-  /* ./parser//parser.nit:2781 */
+  /* ./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, 2781);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2804);
   }
-  /* ./parser//parser.nit:2783 */
+  /* ./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, 2783);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2806);
   }
-  /* ./parser//parser.nit:2784 */
+  /* ./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:2786 */
+  /* ./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, 2786);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2809);
   }
-  /* ./parser//parser.nit:2787 */
+  /* ./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:2789 */
+  /* ./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, 2789);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2812);
   }
-  /* ./parser//parser.nit:2790 */
+  /* ./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:2791 */
+  /* ./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:2801 */
+  /* ./parser//parser.nit:2824 */
   fra.me.REG[2] = fra.me.REG[12];
-  /* ./parser//parser.nit:2802 */
+  /* ./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, 2802);
+    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);
@@ -10817,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 = 2805;
+  fra.me.line = 2828;
   fra.me.meth = LOCATE_parser___ReduceAction53___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10825,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:2805 */
+  /* ./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;
@@ -10839,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 = 2809;
+  fra.me.line = 2832;
   fra.me.meth = LOCATE_parser___ReduceAction54___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 14;
@@ -10859,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:2811 */
+  /* ./parser//parser.nit:2834 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2812 */
+  /* ./parser//parser.nit:2835 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2813 */
+  /* ./parser//parser.nit:2836 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2814 */
+  /* ./parser//parser.nit:2837 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2815 */
+  /* ./parser//parser.nit:2838 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2816 */
+  /* ./parser//parser.nit:2839 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2817 */
+  /* ./parser//parser.nit:2840 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2818 */
+  /* ./parser//parser.nit:2841 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2819 */
+  /* ./parser//parser.nit:2842 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2820 */
+  /* ./parser//parser.nit:2843 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2821 */
+  /* ./parser//parser.nit:2844 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2822 */
+  /* ./parser//parser.nit:2845 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2823 */
+  /* ./parser//parser.nit:2846 */
   fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2824 */
+  /* ./parser//parser.nit:2847 */
   fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2825 */
+  /* ./parser//parser.nit:2848 */
   fra.me.REG[13] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2827 */
+  /* ./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, 2827);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2850);
   }
-  /* ./parser//parser.nit:2829 */
+  /* ./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, 2829);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2852);
   }
-  /* ./parser//parser.nit:2831 */
+  /* ./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, 2831);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2854);
   }
-  /* ./parser//parser.nit:2833 */
+  /* ./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, 2833);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2856);
   }
-  /* ./parser//parser.nit:2835 */
+  /* ./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, 2835);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2858);
   }
-  /* ./parser//parser.nit:2837 */
+  /* ./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, 2837);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2860);
   }
-  /* ./parser//parser.nit:2838 */
+  /* ./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:2840 */
+  /* ./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, 2840);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2863);
   }
-  /* ./parser//parser.nit:2841 */
+  /* ./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:2843 */
+  /* ./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, 2843);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2866);
   }
-  /* ./parser//parser.nit:2844 */
+  /* ./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:2845 */
+  /* ./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:2855 */
+  /* ./parser//parser.nit:2878 */
   fra.me.REG[2] = fra.me.REG[13];
-  /* ./parser//parser.nit:2856 */
+  /* ./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, 2856);
+    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);
@@ -10970,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 = 2859;
+  fra.me.line = 2882;
   fra.me.meth = LOCATE_parser___ReduceAction54___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10978,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:2859 */
+  /* ./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;
@@ -10992,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 = 2863;
+  fra.me.line = 2886;
   fra.me.meth = LOCATE_parser___ReduceAction55___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11002,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:2865 */
+  /* ./parser//parser.nit:2888 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2866 */
+  /* ./parser//parser.nit:2889 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2868 */
+  /* ./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, 2868);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2891);
   }
-  /* ./parser//parser.nit:2869 */
+  /* ./parser//parser.nit:2892 */
   fra.me.REG[3] = NEW_AConcreteClasskind_parser_prod___AConcreteClasskind___init_aconcreteclasskind(fra.me.REG[3]);
-  /* ./parser//parser.nit:2872 */
+  /* ./parser//parser.nit:2895 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2873 */
+  /* ./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, 2873);
+    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);
@@ -11036,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 = 2876;
+  fra.me.line = 2899;
   fra.me.meth = LOCATE_parser___ReduceAction55___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11044,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:2876 */
+  /* ./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;
@@ -11058,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 = 2880;
+  fra.me.line = 2903;
   fra.me.meth = LOCATE_parser___ReduceAction56___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -11069,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:2882 */
+  /* ./parser//parser.nit:2905 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2883 */
+  /* ./parser//parser.nit:2906 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2884 */
+  /* ./parser//parser.nit:2907 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2886 */
+  /* ./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, 2886);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2909);
   }
-  /* ./parser//parser.nit:2888 */
+  /* ./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, 2888);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2911);
   }
-  /* ./parser//parser.nit:2889 */
+  /* ./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:2893 */
+  /* ./parser//parser.nit:2916 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2894 */
+  /* ./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, 2894);
+    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);
@@ -11111,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 = 2897;
+  fra.me.line = 2920;
   fra.me.meth = LOCATE_parser___ReduceAction56___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11119,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:2897 */
+  /* ./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;
@@ -11133,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 = 2901;
+  fra.me.line = 2924;
   fra.me.meth = LOCATE_parser___ReduceAction57___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11143,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:2903 */
+  /* ./parser//parser.nit:2926 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2904 */
+  /* ./parser//parser.nit:2927 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2906 */
+  /* ./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, 2906);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2929);
   }
-  /* ./parser//parser.nit:2907 */
+  /* ./parser//parser.nit:2930 */
   fra.me.REG[3] = NEW_AInterfaceClasskind_parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(fra.me.REG[3]);
-  /* ./parser//parser.nit:2910 */
+  /* ./parser//parser.nit:2933 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2911 */
+  /* ./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, 2911);
+    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);
@@ -11177,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 = 2914;
+  fra.me.line = 2937;
   fra.me.meth = LOCATE_parser___ReduceAction57___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11185,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:2914 */
+  /* ./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;
@@ -11199,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 = 2918;
+  fra.me.line = 2941;
   fra.me.meth = LOCATE_parser___ReduceAction58___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11209,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:2920 */
+  /* ./parser//parser.nit:2943 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2921 */
+  /* ./parser//parser.nit:2944 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2923 */
+  /* ./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, 2923);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2946);
   }
-  /* ./parser//parser.nit:2924 */
+  /* ./parser//parser.nit:2947 */
   fra.me.REG[3] = NEW_AEnumClasskind_parser_prod___AEnumClasskind___init_aenumclasskind(fra.me.REG[3]);
-  /* ./parser//parser.nit:2927 */
+  /* ./parser//parser.nit:2950 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2928 */
+  /* ./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, 2928);
+    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);
@@ -11243,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 = 2931;
+  fra.me.line = 2954;
   fra.me.meth = LOCATE_parser___ReduceAction58___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11251,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:2931 */
+  /* ./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;
@@ -11260,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 = 2935;
+  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:2937 */
+  /* ./parser//parser.nit:2960 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2938 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2939 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2940 */
+  /* ./parser//parser.nit:2961 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2941 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2942 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2943 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2945 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser.nit:2963 */
+  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;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2946 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2963);
   }
-  /* ./parser//parser.nit:2948 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:2949 */
+  /* ./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, 2949);
+    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);
@@ -11331,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 = 2952;
+  fra.me.line = 2971;
   fra.me.meth = LOCATE_parser___ReduceAction59___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11339,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:2952 */
+  /* ./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;
@@ -11348,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 = 2956;
+  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:2958 */
+  /* ./parser//parser.nit:2977 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2959 */
+  /* ./parser//parser.nit:2978 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2960 */
+  /* ./parser//parser.nit:2979 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2961 */
+  /* ./parser//parser.nit:2980 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2962 */
+  /* ./parser//parser.nit:2981 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2963 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2964 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2965 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2968 */
-  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, 2968);
-  }
-  /* ./parser//parser.nit:2969 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./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 */
+  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:2970 */
-    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:2972 */
-  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:2973 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:2974 */
+  /* ./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, 2974);
+    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);
@@ -11431,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 = 2977;
+  fra.me.line = 2992;
   fra.me.meth = LOCATE_parser___ReduceAction60___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11439,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:2977 */
+  /* ./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;
@@ -11448,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 = 2981;
+  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:2983 */
+  /* ./parser//parser.nit:2998 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2984 */
+  /* ./parser//parser.nit:2999 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2985 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2986 */
+  /* ./parser//parser.nit:3000 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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:2988 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2989 */
+  /* ./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 */
+  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, 2989);
+    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);
@@ -11494,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 = 2992;
+  fra.me.line = 3017;
   fra.me.meth = LOCATE_parser___ReduceAction61___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11502,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:2992 */
+  /* ./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;
@@ -11511,40 +11629,37 @@ 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 = 2996;
+  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:2998 */
+  /* ./parser//parser.nit:3023 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2999 */
+  /* ./parser//parser.nit:3024 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3001 */
-  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, 3001);
-  }
-  /* ./parser//parser.nit:3002 */
-  fra.me.REG[3] = NEW_AFormaldef_parser_prod___AFormaldef___init_aformaldef(fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3006 */
+  /* ./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:3007 */
+  /* ./parser//parser.nit:3029 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction62____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3007);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3029);
   }
   REGB0 = ATTR_parser___ReduceAction62____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11560,7 +11675,7 @@ void parser___ReduceAction62___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos65]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3010;
+  fra.me.line = 3032;
   fra.me.meth = LOCATE_parser___ReduceAction62___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11568,7 +11683,7 @@ void parser___ReduceAction62___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:3010 */
+  /* ./parser//parser.nit:3032 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction62____goto(fra.me.REG[1]) = REGB0;
@@ -11577,49 +11692,40 @@ 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;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3014;
+  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:3016 */
+  /* ./parser//parser.nit:3038 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3017 */
+  /* ./parser//parser.nit:3039 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3018 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3020 */
-  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, 3020);
-  }
-  /* ./parser//parser.nit:3022 */
-  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, 3022);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3041);
   }
-  /* ./parser//parser.nit:3023 */
-  fra.me.REG[3] = NEW_AFormaldef_parser_prod___AFormaldef___init_aformaldef(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3027 */
+  /* ./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:3028 */
+  /* ./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, 3028);
+    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);
@@ -11635,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 = 3031;
+  fra.me.line = 3050;
   fra.me.meth = LOCATE_parser___ReduceAction63___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11643,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:3031 */
+  /* ./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;
@@ -11652,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 = 3035;
+  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:3037 */
+  /* ./parser//parser.nit:3056 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3038 */
+  /* ./parser//parser.nit:3057 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3039 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3040 */
+  /* ./parser//parser.nit:3058 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3041 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3043 */
-  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, 3043);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3060);
   }
-  /* ./parser//parser.nit:3045 */
+  /* ./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, 3045);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3062);
   }
-  /* ./parser//parser.nit:3046 */
-  fra.me.REG[3] = NEW_ASuperclass_parser_prod___ASuperclass___init_asuperclass(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:3051 */
+  /* ./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:3052 */
+  /* ./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, 3052);
+    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);
@@ -11715,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 = 3055;
+  fra.me.line = 3071;
   fra.me.meth = LOCATE_parser___ReduceAction64___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11723,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:3055 */
+  /* ./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;
@@ -11737,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 = 3059;
+  fra.me.line = 3075;
   fra.me.meth = LOCATE_parser___ReduceAction65___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -11749,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:3061 */
+  /* ./parser//parser.nit:3077 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3062 */
+  /* ./parser//parser.nit:3078 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3063 */
+  /* ./parser//parser.nit:3079 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3064 */
+  /* ./parser//parser.nit:3080 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3065 */
+  /* ./parser//parser.nit:3081 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3067 */
-  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, 3067);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3083);
   }
-  /* ./parser//parser.nit:3069 */
+  /* ./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, 3069);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3085);
   }
-  /* ./parser//parser.nit:3070 */
-  fra.me.REG[3] = NEW_ASuperclass_parser_prod___ASuperclass___init_asuperclass(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3075 */
+  /* ./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:3076 */
+  /* ./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, 3076);
+    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);
@@ -11795,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 = 3079;
+  fra.me.line = 3095;
   fra.me.meth = LOCATE_parser___ReduceAction65___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11803,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:3079 */
+  /* ./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;
@@ -11812,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 = 3083;
+  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:3085 */
+  /* ./parser//parser.nit:3101 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3086 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3087 */
+  /* ./parser//parser.nit:3102 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3089 */
+  /* ./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 */
+  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:3090 */
+  /* ./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, 3090);
+    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);
@@ -11855,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 = 3093;
+  fra.me.line = 3119;
   fra.me.meth = LOCATE_parser___ReduceAction66___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11863,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:3093 */
+  /* ./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;
@@ -11872,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 = 3097;
+  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:3099 */
+  /* ./parser//parser.nit:3125 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3100 */
+  /* ./parser//parser.nit:3126 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3127 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3101 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3102 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3103 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3104 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3105 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3106 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3108 */
-  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, 3108);
-  }
-  /* ./parser//parser.nit:3110 */
-  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, 3110);
-  }
-  /* ./parser//parser.nit:3112 */
-  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, 3112);
-  }
-  /* ./parser//parser.nit:3114 */
-  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, 3114);
-  }
-  /* ./parser//parser.nit:3116 */
-  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, 3116);
-  }
-  /* ./parser//parser.nit:3118 */
-  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, 3118);
-  }
-  /* ./parser//parser.nit:3119 */
-  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:3128 */
-  fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:3129 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./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, 3129);
+    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);
@@ -11968,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 = 3132;
+  fra.me.line = 3133;
   fra.me.meth = LOCATE_parser___ReduceAction67___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11976,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:3132 */
+  /* ./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;
@@ -11985,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 = 3136;
+  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;
@@ -12003,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:3138 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:3139 */
-  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:3140 */
-  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:3141 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3142 */
-  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:3143 */
-  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:3144 */
-  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:3145 */
-  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:3146 */
-  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:3148 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  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, 3148);
   }
   /* ./parser//parser.nit:3150 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  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, 3150);
   }
   /* ./parser//parser.nit:3152 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  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, 3152);
   }
   /* ./parser//parser.nit:3154 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  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, 3154);
   }
   /* ./parser//parser.nit:3156 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  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, 3156);
   }
   /* ./parser//parser.nit:3158 */
-  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, 3158);
-  }
-  /* ./parser//parser.nit:3160 */
   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, 3160);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3158);
   }
-  /* ./parser//parser.nit:3161 */
-  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:3170 */
+  /* ./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:3171 */
+  /* ./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, 3171);
+    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);
@@ -12090,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 = 3174;
+  fra.me.line = 3172;
   fra.me.meth = LOCATE_parser___ReduceAction68___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12098,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:3174 */
+  /* ./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;
@@ -12107,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 = 3178;
+  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;
@@ -12125,28 +12184,35 @@ 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:3180 */
+  /* ./parser//parser.nit:3178 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3181 */
+  /* ./parser//parser.nit:3179 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3182 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3183 */
+  /* ./parser//parser.nit:3180 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3184 */
+  /* ./parser//parser.nit:3181 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3185 */
+  /* ./parser//parser.nit:3182 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3186 */
+  /* ./parser//parser.nit:3183 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3187 */
+  /* ./parser//parser.nit:3184 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3188 */
+  /* ./parser//parser.nit:3185 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 3188);
+  }
   /* ./parser//parser.nit:3190 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  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);
@@ -12182,7 +12248,7 @@ void parser___ReduceAction69___action(val_t p0, val_t p1){
     nit_abort("Assert failed", NULL, LOCATE_parser, 3200);
   }
   /* ./parser//parser.nit:3201 */
-  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]);
+  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:3211 */
@@ -12222,7 +12288,7 @@ 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;
@@ -12230,7 +12296,7 @@ void parser___ReduceAction70___action(val_t p0, val_t p1){
   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;
@@ -12240,7 +12306,6 @@ 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:3220 */
@@ -12261,59 +12326,51 @@ void parser___ReduceAction70___action(val_t p0, val_t p1){
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3228 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3229 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3231 */
-  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, 3231);
-  }
-  /* ./parser//parser.nit:3233 */
-  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, 3233);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3230);
   }
-  /* ./parser//parser.nit:3235 */
+  /* ./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, 3235);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3232);
   }
-  /* ./parser//parser.nit:3237 */
+  /* ./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, 3237);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3234);
   }
-  /* ./parser//parser.nit:3239 */
+  /* ./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, 3239);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3236);
   }
-  /* ./parser//parser.nit:3241 */
+  /* ./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, 3241);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3238);
   }
-  /* ./parser//parser.nit:3243 */
+  /* ./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, 3243);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3240);
   }
-  /* ./parser//parser.nit:3244 */
-  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:3253 */
+  /* ./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:3254 */
+  /* ./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, 3254);
+    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);
@@ -12329,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 = 3257;
+  fra.me.line = 3254;
   fra.me.meth = LOCATE_parser___ReduceAction70___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12337,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:3257 */
+  /* ./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;
@@ -12346,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 = 3261;
+  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;
@@ -12364,28 +12421,37 @@ 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:3263 */
+  /* ./parser//parser.nit:3260 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3264 */
+  /* ./parser//parser.nit:3261 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3265 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3266 */
+  /* ./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:3267 */
+  /* ./parser//parser.nit:3264 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3268 */
+  /* ./parser//parser.nit:3265 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3269 */
+  /* ./parser//parser.nit:3266 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3270 */
+  /* ./parser//parser.nit:3267 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3271 */
+  /* ./parser//parser.nit:3268 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 3271);
+  }
   /* ./parser//parser.nit:3273 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  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);
@@ -12421,7 +12487,7 @@ void parser___ReduceAction71___action(val_t p0, val_t p1){
     nit_abort("Assert failed", NULL, LOCATE_parser, 3283);
   }
   /* ./parser//parser.nit:3284 */
-  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]);
+  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:3294 */
@@ -12461,7 +12527,7 @@ 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;
@@ -12469,7 +12535,7 @@ void parser___ReduceAction72___action(val_t p0, val_t p1){
   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;
@@ -12479,7 +12545,6 @@ 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:3303 */
@@ -12500,59 +12565,51 @@ void parser___ReduceAction72___action(val_t p0, val_t p1){
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3311 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3312 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3314 */
-  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, 3314);
-  }
-  /* ./parser//parser.nit:3316 */
-  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, 3316);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3313);
   }
-  /* ./parser//parser.nit:3318 */
+  /* ./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, 3318);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3315);
   }
-  /* ./parser//parser.nit:3320 */
+  /* ./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, 3320);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3317);
   }
-  /* ./parser//parser.nit:3322 */
+  /* ./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, 3322);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3319);
   }
-  /* ./parser//parser.nit:3324 */
+  /* ./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, 3324);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3321);
   }
-  /* ./parser//parser.nit:3326 */
+  /* ./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, 3326);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3323);
   }
-  /* ./parser//parser.nit:3327 */
-  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:3336 */
+  /* ./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:3337 */
+  /* ./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, 3337);
+    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);
@@ -12568,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 = 3340;
+  fra.me.line = 3337;
   fra.me.meth = LOCATE_parser___ReduceAction72___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12576,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:3340 */
+  /* ./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;
@@ -12585,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 = 3344;
+  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;
@@ -12602,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:3346 */
+  /* ./parser//parser.nit:3343 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3347 */
+  /* ./parser//parser.nit:3344 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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:3348 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(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:3349 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(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:3350 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(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:3351 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(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:3352 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3353 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3355 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  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, 3355);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3354);
   }
-  /* ./parser//parser.nit:3357 */
-  REGB0 = 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, 3357);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3356);
   }
-  /* ./parser//parser.nit:3359 */
-  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, 3359);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3358);
   }
-  /* ./parser//parser.nit:3361 */
-  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, 3361);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3360);
   }
-  /* ./parser//parser.nit:3363 */
-  REGB0 = 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, 3363);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3362);
   }
   /* ./parser//parser.nit:3364 */
-  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:3372 */
+  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:3373 */
+  /* ./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, 3373);
+    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);
@@ -12674,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 = 3376;
+  fra.me.line = 3380;
   fra.me.meth = LOCATE_parser___ReduceAction73___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12682,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:3376 */
+  /* ./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;
@@ -12691,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 = 3380;
+  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;
@@ -12708,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:3382 */
+  /* ./parser//parser.nit:3386 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3383 */
+  /* ./parser//parser.nit:3387 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3384 */
+  /* ./parser//parser.nit:3388 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3385 */
+  /* ./parser//parser.nit:3389 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3386 */
+  /* ./parser//parser.nit:3390 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3387 */
+  /* ./parser//parser.nit:3391 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3388 */
+  /* ./parser//parser.nit:3392 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3389 */
+  /* ./parser//parser.nit:3393 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3390 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3392 */
-  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, 3392);
-  }
-  /* ./parser//parser.nit:3394 */
-  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, 3394);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3395);
   }
-  /* ./parser//parser.nit:3396 */
+  /* ./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, 3396);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3397);
   }
-  /* ./parser//parser.nit:3398 */
+  /* ./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, 3398);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3399);
   }
-  /* ./parser//parser.nit:3400 */
+  /* ./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, 3400);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3401);
   }
-  /* ./parser//parser.nit:3402 */
+  /* ./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, 3402);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3403);
   }
-  /* ./parser//parser.nit:3403 */
-  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:3411 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./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: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, 3412);
+    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);
@@ -12789,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 = 3415;
+  fra.me.line = 3416;
   fra.me.meth = LOCATE_parser___ReduceAction74___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12797,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:3415 */
+  /* ./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;
@@ -12806,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 = 3419;
+  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;
@@ -12823,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:3421 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:3422 */
-  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:3423 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3424 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3425 */
-  fra.me.REG[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:3426 */
-  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:3427 */
-  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:3428 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3429 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3430 */
-  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, 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[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  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[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  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, 3434);
   }
   /* ./parser//parser.nit:3436 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  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, 3436);
   }
   /* ./parser//parser.nit:3438 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  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, 3438);
   }
-  /* ./parser//parser.nit:3439 */
-  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:3447 */
+  /* ./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, 3440);
+  }
+  /* ./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, 3442);
+  }
+  /* ./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:3448 */
+  /* ./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, 3448);
+    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);
@@ -12895,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 = 3451;
+  fra.me.line = 3455;
   fra.me.meth = LOCATE_parser___ReduceAction75___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12903,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:3451 */
+  /* ./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;
@@ -12912,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 = 3455;
+  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;
@@ -12929,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:3457 */
+  /* ./parser//parser.nit:3461 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3458 */
+  /* ./parser//parser.nit:3462 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3459 */
+  /* ./parser//parser.nit:3463 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3460 */
+  /* ./parser//parser.nit:3464 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3461 */
+  /* ./parser//parser.nit:3465 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3462 */
+  /* ./parser//parser.nit:3466 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3463 */
+  /* ./parser//parser.nit:3467 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3464 */
+  /* ./parser//parser.nit:3468 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3465 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3467 */
-  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, 3467);
-  }
-  /* ./parser//parser.nit:3469 */
-  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, 3469);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3470);
   }
-  /* ./parser//parser.nit:3471 */
+  /* ./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, 3471);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3472);
   }
-  /* ./parser//parser.nit:3473 */
+  /* ./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, 3473);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3474);
   }
-  /* ./parser//parser.nit:3475 */
+  /* ./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, 3475);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3476);
   }
-  /* ./parser//parser.nit:3477 */
+  /* ./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, 3477);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3478);
   }
-  /* ./parser//parser.nit:3478 */
-  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:3486 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./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: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, 3487);
+    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);
@@ -13010,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 = 3490;
+  fra.me.line = 3491;
   fra.me.meth = LOCATE_parser___ReduceAction76___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13018,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:3490 */
+  /* ./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;
@@ -13027,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 = 3494;
+  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;
@@ -13044,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:3496 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:3497 */
-  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:3498 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3499 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3500 */
-  fra.me.REG[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:3501 */
-  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:3502 */
-  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:3503 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3504 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3505 */
-  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, 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[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  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[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  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, 3509);
   }
   /* ./parser//parser.nit:3511 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  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, 3511);
   }
   /* ./parser//parser.nit:3513 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  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, 3513);
   }
-  /* ./parser//parser.nit:3514 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3523 */
+  /* ./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, 3515);
+  }
+  /* ./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, 3517);
+  }
+  /* ./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:3524 */
+  /* ./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, 3524);
+    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);
@@ -13116,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 = 3527;
+  fra.me.line = 3530;
   fra.me.meth = LOCATE_parser___ReduceAction77___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13124,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:3527 */
+  /* ./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;
@@ -13133,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 = 3531;
+  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;
@@ -13150,35 +13225,26 @@ 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:3533 */
+  /* ./parser//parser.nit:3536 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3534 */
+  /* ./parser//parser.nit:3537 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3535 */
+  /* ./parser//parser.nit:3538 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3536 */
+  /* ./parser//parser.nit:3539 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3537 */
+  /* ./parser//parser.nit:3540 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3538 */
+  /* ./parser//parser.nit:3541 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3539 */
+  /* ./parser//parser.nit:3542 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3540 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3541 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3543 */
-  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, 3543);
-  }
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3545 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  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, 3545);
@@ -13208,14 +13274,14 @@ void parser___ReduceAction78___action(val_t p0, val_t p1){
     nit_abort("Assert failed", NULL, LOCATE_parser, 3553);
   }
   /* ./parser//parser.nit:3554 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3563 */
-  fra.me.REG[2] = fra.me.REG[3];
+  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: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, 3564);
+    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);
@@ -13231,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 = 3567;
+  fra.me.line = 3568;
   fra.me.meth = LOCATE_parser___ReduceAction78___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13239,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:3567 */
+  /* ./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;
@@ -13253,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 = 3571;
+  fra.me.line = 3572;
   fra.me.meth = LOCATE_parser___ReduceAction79___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -13268,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:3573 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:3574 */
-  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:3575 */
-  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:3576 */
-  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:3577 */
-  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:3578 */
-  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:3579 */
-  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:3580 */
-  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:3581 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3582 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3583 */
+  /* ./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, 3583);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3584);
   }
-  /* ./parser//parser.nit:3585 */
-  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, 3585);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3586);
   }
-  /* ./parser//parser.nit:3587 */
-  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, 3587);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3588);
   }
-  /* ./parser//parser.nit:3589 */
-  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, 3589);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3590);
   }
-  /* ./parser//parser.nit:3591 */
-  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, 3591);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3592);
   }
-  /* ./parser//parser.nit:3593 */
-  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, 3593);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3594);
   }
-  /* ./parser//parser.nit:3594 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3603 */
+  /* ./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:3604 */
+  /* ./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, 3604);
+    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);
@@ -13346,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 = 3607;
+  fra.me.line = 3609;
   fra.me.meth = LOCATE_parser___ReduceAction79___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13354,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:3607 */
+  /* ./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;
@@ -13363,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 = 3611;
+  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;
@@ -13381,73 +13447,64 @@ 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:3613 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3614 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3615 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:3616 */
-  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:3617 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3618 */
-  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:3619 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(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:3620 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(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:3621 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(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:3622 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3624 */
-  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, 3624);
-  }
-  /* ./parser//parser.nit:3626 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3623 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit: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, 3626);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3625);
   }
-  /* ./parser//parser.nit:3628 */
+  /* ./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, 3628);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3627);
   }
-  /* ./parser//parser.nit:3630 */
+  /* ./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, 3630);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3629);
   }
-  /* ./parser//parser.nit:3632 */
+  /* ./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, 3632);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3631);
   }
-  /* ./parser//parser.nit:3634 */
+  /* ./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, 3634);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3633);
   }
-  /* ./parser//parser.nit:3636 */
+  /* ./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, 3636);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3635);
   }
-  /* ./parser//parser.nit:3637 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit: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:3647 */
@@ -13487,7 +13544,7 @@ 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[6];} 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;
@@ -13495,7 +13552,7 @@ void parser___ReduceAction81___action(val_t p0, val_t p1){
   fra.me.line = 3654;
   fra.me.meth = LOCATE_parser___ReduceAction81___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13503,6 +13560,9 @@ void parser___ReduceAction81___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   /* ./parser//parser.nit:3656 */
@@ -13512,42 +13572,70 @@ void parser___ReduceAction81___action(val_t p0, val_t p1){
   /* ./parser//parser.nit:3658 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3659 */
-  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:3660 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(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:3661 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:3662 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3663 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3664 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 3662);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3667);
   }
-  /* ./parser//parser.nit:3664 */
-  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: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, 3664);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3669);
   }
-  /* ./parser//parser.nit:3666 */
-  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: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, 3666);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3671);
   }
-  /* ./parser//parser.nit:3668 */
-  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: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, 3668);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3673);
   }
-  /* ./parser//parser.nit:3669 */
-  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:3681 */
+  /* ./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, 3675);
+  }
+  /* ./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, 3677);
+  }
+  /* ./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, 3679);
+  }
+  /* ./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:3682 */
+  /* ./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, 3682);
+    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);
@@ -13563,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 = 3685;
+  fra.me.line = 3694;
   fra.me.meth = LOCATE_parser___ReduceAction81___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13571,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:3685 */
+  /* ./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;
@@ -13580,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[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 = 3689;
+  fra.me.line = 3698;
   fra.me.meth = LOCATE_parser___ReduceAction82___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;
@@ -13597,59 +13685,72 @@ void parser___ReduceAction82___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3691 */
+  /* ./parser//parser.nit:3700 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3692 */
+  /* ./parser//parser.nit:3701 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3693 */
+  /* ./parser//parser.nit:3702 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3694 */
+  /* ./parser//parser.nit:3703 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3704 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3705 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3695 */
+  /* ./parser//parser.nit:3706 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3696 */
+  /* ./parser//parser.nit:3707 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3698 */
-  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:3708 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 3698);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3710);
   }
-  /* ./parser//parser.nit:3700 */
-  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: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, 3700);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3712);
   }
-  /* ./parser//parser.nit:3702 */
-  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: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, 3702);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3714);
   }
-  /* ./parser//parser.nit:3704 */
-  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: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, 3704);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3716);
   }
-  /* ./parser//parser.nit:3706 */
-  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: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, 3706);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3718);
   }
-  /* ./parser//parser.nit:3707 */
-  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:3719 */
-  fra.me.REG[2] = fra.me.REG[3];
   /* ./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, 3720);
+  }
+  /* ./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: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, 3720);
+    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);
@@ -13665,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 = 3723;
+  fra.me.line = 3735;
   fra.me.meth = LOCATE_parser___ReduceAction82___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13673,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:3723 */
+  /* ./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;
@@ -13682,15 +13783,15 @@ void parser___ReduceAction82___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction83___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 = 3727;
+  fra.me.line = 3739;
   fra.me.meth = LOCATE_parser___ReduceAction83___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13699,59 +13800,81 @@ void parser___ReduceAction83___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3729 */
+  /* ./parser//parser.nit:3741 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3730 */
+  /* ./parser//parser.nit:3742 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3731 */
+  /* ./parser//parser.nit:3743 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3732 */
+  /* ./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:3733 */
+  /* ./parser//parser.nit:3747 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3734 */
+  /* ./parser//parser.nit:3748 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3736 */
-  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:3749 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3750 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 3736);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3752);
   }
-  /* ./parser//parser.nit:3738 */
-  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: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, 3738);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3754);
   }
-  /* ./parser//parser.nit:3740 */
-  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: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, 3740);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3756);
   }
-  /* ./parser//parser.nit:3742 */
-  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: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, 3742);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3758);
   }
-  /* ./parser//parser.nit:3744 */
-  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: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, 3744);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3760);
   }
-  /* ./parser//parser.nit:3745 */
-  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:3757 */
+  /* ./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, 3762);
+  }
+  /* ./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, 3764);
+  }
+  /* ./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:3758 */
+  /* ./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, 3758);
+    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);
@@ -13767,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 = 3761;
+  fra.me.line = 3779;
   fra.me.meth = LOCATE_parser___ReduceAction83___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13775,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:3761 */
+  /* ./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;
@@ -13784,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[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 = 3765;
+  fra.me.line = 3783;
   fra.me.meth = LOCATE_parser___ReduceAction84___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;
@@ -13802,67 +13925,80 @@ void parser___ReduceAction84___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3767 */
+  /* ./parser//parser.nit:3785 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3768 */
+  /* ./parser//parser.nit:3786 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3769 */
+  /* ./parser//parser.nit:3787 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3770 */
+  /* ./parser//parser.nit:3788 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3771 */
+  /* ./parser//parser.nit:3789 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3790 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3791 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3772 */
+  /* ./parser//parser.nit:3792 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3773 */
+  /* ./parser//parser.nit:3793 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3775 */
-  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:3794 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 3775);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3796);
   }
-  /* ./parser//parser.nit:3777 */
-  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: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, 3777);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3798);
   }
-  /* ./parser//parser.nit:3779 */
-  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: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, 3779);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3800);
   }
-  /* ./parser//parser.nit:3781 */
-  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: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, 3781);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3802);
   }
-  /* ./parser//parser.nit:3783 */
-  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: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, 3783);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3804);
   }
-  /* ./parser//parser.nit:3785 */
-  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: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, 3785);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3806);
   }
-  /* ./parser//parser.nit:3786 */
-  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:3798 */
+  /* ./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, 3808);
+  }
+  /* ./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:3799 */
+  /* ./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, 3799);
+    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);
@@ -13878,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 = 3802;
+  fra.me.line = 3823;
   fra.me.meth = LOCATE_parser___ReduceAction84___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13886,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:3802 */
+  /* ./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;
@@ -13895,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[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 = 3806;
+  fra.me.line = 3827;
   fra.me.meth = LOCATE_parser___ReduceAction85___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;
@@ -13912,59 +14048,90 @@ void parser___ReduceAction85___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:3808 */
+  /* ./parser//parser.nit:3829 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3809 */
+  /* ./parser//parser.nit:3830 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3810 */
+  /* ./parser//parser.nit:3831 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3811 */
+  /* ./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:3834 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3812 */
+  /* ./parser//parser.nit:3835 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3813 */
+  /* ./parser//parser.nit:3836 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3815 */
-  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: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, 3815);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3841);
   }
-  /* ./parser//parser.nit:3817 */
-  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: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, 3817);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3843);
   }
-  /* ./parser//parser.nit:3819 */
-  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: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, 3819);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3845);
   }
-  /* ./parser//parser.nit:3821 */
-  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: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, 3821);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3847);
   }
-  /* ./parser//parser.nit:3823 */
-  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: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, 3823);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3849);
   }
-  /* ./parser//parser.nit:3824 */
-  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:3836 */
+  /* ./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:3837 */
+  /* ./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, 3837);
+    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);
@@ -13980,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 = 3840;
+  fra.me.line = 3870;
   fra.me.meth = LOCATE_parser___ReduceAction85___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13988,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:3840 */
+  /* ./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;
@@ -13997,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[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 = 3844;
+  fra.me.line = 3874;
   fra.me.meth = LOCATE_parser___ReduceAction86___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;
@@ -14013,69 +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[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3846 */
+  /* ./parser//parser.nit:3876 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3847 */
+  /* ./parser//parser.nit:3877 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3848 */
+  /* ./parser//parser.nit:3878 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3849 */
+  /* ./parser//parser.nit:3879 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3850 */
+  /* ./parser//parser.nit:3880 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3851 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3852 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3854 */
-  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, 3854);
-  }
-  /* ./parser//parser.nit:3856 */
-  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, 3856);
-  }
-  /* ./parser//parser.nit:3858 */
-  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, 3858);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3882);
   }
-  /* ./parser//parser.nit:3860 */
+  /* ./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, 3860);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3884);
   }
-  /* ./parser//parser.nit:3862 */
+  /* ./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, 3862);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3886);
   }
-  /* ./parser//parser.nit:3864 */
+  /* ./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, 3864);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3888);
   }
-  /* ./parser//parser.nit:3865 */
-  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:3877 */
+  /* ./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:3878 */
+  /* ./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, 3878);
+    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);
@@ -14091,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 = 3881;
+  fra.me.line = 3905;
   fra.me.meth = LOCATE_parser___ReduceAction86___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14099,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:3881 */
+  /* ./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;
@@ -14108,15 +14257,15 @@ void parser___ReduceAction86___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction87___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 = 3885;
+  fra.me.line = 3909;
   fra.me.meth = LOCATE_parser___ReduceAction87___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14125,68 +14274,59 @@ void parser___ReduceAction87___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3887 */
+  /* ./parser//parser.nit:3911 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3888 */
+  /* ./parser//parser.nit:3912 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3889 */
+  /* ./parser//parser.nit:3913 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3890 */
+  /* ./parser//parser.nit:3914 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3891 */
+  /* ./parser//parser.nit:3915 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3892 */
+  /* ./parser//parser.nit:3916 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3893 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3895 */
-  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, 3895);
-  }
-  /* ./parser//parser.nit:3897 */
-  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: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, 3897);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3918);
   }
-  /* ./parser//parser.nit:3899 */
-  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, 3899);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3920);
   }
-  /* ./parser//parser.nit:3901 */
+  /* ./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, 3901);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3922);
   }
-  /* ./parser//parser.nit:3903 */
+  /* ./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, 3903);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3924);
   }
-  /* ./parser//parser.nit:3905 */
+  /* ./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, 3905);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3926);
   }
-  /* ./parser//parser.nit:3906 */
-  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:3918 */
+  /* ./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:3919 */
+  /* ./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, 3919);
+    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);
@@ -14202,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 = 3922;
+  fra.me.line = 3943;
   fra.me.meth = LOCATE_parser___ReduceAction87___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14210,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:3922 */
+  /* ./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;
@@ -14219,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[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3926;
+  fra.me.line = 3947;
   fra.me.meth = LOCATE_parser___ReduceAction88___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14236,77 +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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3928 */
+  /* ./parser//parser.nit:3949 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3929 */
+  /* ./parser//parser.nit:3950 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3930 */
+  /* ./parser//parser.nit:3951 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3931 */
+  /* ./parser//parser.nit:3952 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3932 */
+  /* ./parser//parser.nit:3953 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3933 */
+  /* ./parser//parser.nit:3954 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3934 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3935 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3937 */
-  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, 3937);
-  }
-  /* ./parser//parser.nit:3939 */
-  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, 3939);
-  }
-  /* ./parser//parser.nit:3941 */
-  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, 3941);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3956);
   }
-  /* ./parser//parser.nit:3943 */
-  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, 3943);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3958);
   }
-  /* ./parser//parser.nit:3945 */
+  /* ./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, 3945);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3960);
   }
-  /* ./parser//parser.nit:3947 */
+  /* ./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, 3947);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3962);
   }
-  /* ./parser//parser.nit:3949 */
+  /* ./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, 3949);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3964);
   }
-  /* ./parser//parser.nit:3950 */
-  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:3962 */
+  /* ./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:3963 */
+  /* ./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, 3963);
+    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);
@@ -14322,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 = 3966;
+  fra.me.line = 3981;
   fra.me.meth = LOCATE_parser___ReduceAction88___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14330,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:3966 */
+  /* ./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;
@@ -14339,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 = 3970;
+  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;
@@ -14356,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:3972 */
+  /* ./parser//parser.nit:3987 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3973 */
+  /* ./parser//parser.nit:3988 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3974 */
+  /* ./parser//parser.nit:3989 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3975 */
+  /* ./parser//parser.nit:3990 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3976 */
+  /* ./parser//parser.nit:3991 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3977 */
+  /* ./parser//parser.nit:3992 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3979 */
-  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, 3979);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3995);
   }
-  /* ./parser//parser.nit:3981 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./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, 3981);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3997);
   }
-  /* ./parser//parser.nit:3983 */
-  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: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, 3983);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3999);
   }
-  /* ./parser//parser.nit:3985 */
-  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: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, 3985);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4001);
   }
-  /* ./parser//parser.nit:3987 */
-  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: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, 3987);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4003);
   }
-  /* ./parser//parser.nit:3988 */
-  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:4000 */
+  /* ./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, 4005);
+  }
+  /* ./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:4001 */
+  /* ./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, 4001);
+    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);
@@ -14424,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 = 4004;
+  fra.me.line = 4022;
   fra.me.meth = LOCATE_parser___ReduceAction89___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14432,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:4004 */
+  /* ./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;
@@ -14441,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 = 4008;
+  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;
@@ -14458,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:4010 */
+  /* ./parser//parser.nit:4028 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4011 */
+  /* ./parser//parser.nit:4029 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4012 */
+  /* ./parser//parser.nit:4030 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4013 */
+  /* ./parser//parser.nit:4031 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4014 */
+  /* ./parser//parser.nit:4032 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4015 */
+  /* ./parser//parser.nit:4033 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4016 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4018 */
-  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, 4018);
-  }
-  /* ./parser//parser.nit:4020 */
-  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: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, 4020);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4035);
   }
-  /* ./parser//parser.nit:4022 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./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, 4022);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4037);
   }
-  /* ./parser//parser.nit:4024 */
-  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: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, 4024);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4039);
   }
-  /* ./parser//parser.nit:4026 */
-  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: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, 4026);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4041);
   }
-  /* ./parser//parser.nit:4028 */
-  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: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, 4028);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4043);
   }
-  /* ./parser//parser.nit:4029 */
-  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:4041 */
+  /* ./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:4042 */
+  /* ./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, 4042);
+    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);
@@ -14535,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 = 4045;
+  fra.me.line = 4060;
   fra.me.meth = LOCATE_parser___ReduceAction90___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14543,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:4045 */
+  /* ./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;
@@ -14557,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 = 4049;
+  fra.me.line = 4064;
   fra.me.meth = LOCATE_parser___ReduceAction91___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -14572,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:4051 */
+  /* ./parser//parser.nit:4066 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4052 */
+  /* ./parser//parser.nit:4067 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4053 */
+  /* ./parser//parser.nit:4068 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4054 */
+  /* ./parser//parser.nit:4069 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4055 */
+  /* ./parser//parser.nit:4070 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4056 */
+  /* ./parser//parser.nit:4071 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4057 */
+  /* ./parser//parser.nit:4072 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4059 */
+  /* ./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, 4059);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4074);
   }
-  /* ./parser//parser.nit:4061 */
+  /* ./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, 4061);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4076);
   }
-  /* ./parser//parser.nit:4063 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./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, 4063);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4078);
   }
-  /* ./parser//parser.nit:4065 */
-  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: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, 4065);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4080);
   }
-  /* ./parser//parser.nit:4067 */
-  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: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, 4067);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4082);
   }
-  /* ./parser//parser.nit:4069 */
-  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: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, 4069);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4084);
   }
-  /* ./parser//parser.nit:4070 */
-  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:4082 */
+  /* ./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:4083 */
+  /* ./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, 4083);
+    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);
@@ -14646,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 = 4086;
+  fra.me.line = 4101;
   fra.me.meth = LOCATE_parser___ReduceAction91___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14654,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:4086 */
+  /* ./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;
@@ -14663,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 = 4090;
+  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;
@@ -14681,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:4092 */
+  /* ./parser//parser.nit:4107 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4093 */
+  /* ./parser//parser.nit:4108 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4094 */
+  /* ./parser//parser.nit:4109 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4095 */
+  /* ./parser//parser.nit:4110 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4096 */
+  /* ./parser//parser.nit:4111 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4097 */
+  /* ./parser//parser.nit:4112 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4098 */
+  /* ./parser//parser.nit:4113 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4099 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4101 */
-  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, 4101);
-  }
-  /* ./parser//parser.nit:4103 */
-  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, 4103);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4115);
   }
-  /* ./parser//parser.nit:4105 */
-  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: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, 4105);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4117);
   }
-  /* ./parser//parser.nit:4107 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./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, 4107);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4119);
   }
-  /* ./parser//parser.nit:4109 */
-  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: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, 4109);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4121);
   }
-  /* ./parser//parser.nit:4111 */
-  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: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, 4111);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4123);
   }
-  /* ./parser//parser.nit:4113 */
-  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: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, 4113);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4125);
   }
-  /* ./parser//parser.nit:4114 */
-  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: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:4127 */
+  /* ./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, 4127);
+    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);
@@ -14766,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 = 4130;
+  fra.me.line = 4142;
   fra.me.meth = LOCATE_parser___ReduceAction92___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14774,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:4130 */
+  /* ./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;
@@ -14783,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[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 = 4134;
+  fra.me.line = 4146;
   fra.me.meth = LOCATE_parser___ReduceAction93___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;
@@ -14801,67 +14914,76 @@ void parser___ReduceAction93___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:4136 */
+  /* ./parser//parser.nit:4148 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4137 */
+  /* ./parser//parser.nit:4149 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4138 */
+  /* ./parser//parser.nit:4150 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4139 */
+  /* ./parser//parser.nit:4151 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4140 */
+  /* ./parser//parser.nit:4152 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4141 */
+  /* ./parser//parser.nit:4153 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4142 */
+  /* ./parser//parser.nit:4154 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4144 */
-  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: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, 4157);
+  }
+  /* ./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, 4144);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4159);
   }
-  /* ./parser//parser.nit:4146 */
+  /* ./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, 4146);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4161);
   }
-  /* ./parser//parser.nit:4148 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./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, 4148);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4163);
   }
-  /* ./parser//parser.nit:4150 */
-  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: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, 4150);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4165);
   }
-  /* ./parser//parser.nit:4152 */
-  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: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, 4152);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4167);
   }
-  /* ./parser//parser.nit:4154 */
-  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: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, 4154);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4169);
   }
-  /* ./parser//parser.nit:4155 */
-  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:4167 */
+  /* ./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:4168 */
+  /* ./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, 4168);
+    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);
@@ -14877,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 = 4171;
+  fra.me.line = 4186;
   fra.me.meth = LOCATE_parser___ReduceAction93___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14885,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:4171 */
+  /* ./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;
@@ -14894,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[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4175;
+  fra.me.line = 4190;
   fra.me.meth = LOCATE_parser___ReduceAction94___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14911,77 +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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4177 */
+  /* ./parser//parser.nit:4192 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4178 */
+  /* ./parser//parser.nit:4193 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4179 */
+  /* ./parser//parser.nit:4194 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4180 */
+  /* ./parser//parser.nit:4195 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4181 */
+  /* ./parser//parser.nit:4196 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4182 */
+  /* ./parser//parser.nit:4197 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4183 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4184 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4186 */
-  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, 4186);
-  }
-  /* ./parser//parser.nit:4188 */
-  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, 4188);
-  }
-  /* ./parser//parser.nit:4190 */
-  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, 4190);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4199);
   }
-  /* ./parser//parser.nit:4192 */
+  /* ./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, 4192);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4201);
   }
-  /* ./parser//parser.nit:4194 */
+  /* ./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, 4194);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4203);
   }
-  /* ./parser//parser.nit:4196 */
+  /* ./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, 4196);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4205);
   }
-  /* ./parser//parser.nit:4198 */
+  /* ./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, 4198);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4207);
   }
-  /* ./parser//parser.nit:4199 */
-  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:4211 */
+  /* ./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:4212 */
+  /* ./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, 4212);
+    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);
@@ -14997,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 = 4215;
+  fra.me.line = 4224;
   fra.me.meth = LOCATE_parser___ReduceAction94___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15005,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:4215 */
+  /* ./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;
@@ -15014,15 +15118,15 @@ void parser___ReduceAction94___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction95___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 = 4219;
+  fra.me.line = 4228;
   fra.me.meth = LOCATE_parser___ReduceAction95___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15032,76 +15136,67 @@ void parser___ReduceAction95___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4221 */
+  /* ./parser//parser.nit:4230 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4222 */
+  /* ./parser//parser.nit:4231 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4223 */
+  /* ./parser//parser.nit:4232 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4224 */
+  /* ./parser//parser.nit:4233 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4225 */
+  /* ./parser//parser.nit:4234 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4226 */
+  /* ./parser//parser.nit:4235 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4227 */
+  /* ./parser//parser.nit:4236 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4228 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4230 */
-  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, 4230);
-  }
-  /* ./parser//parser.nit:4232 */
-  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: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, 4232);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4238);
   }
-  /* ./parser//parser.nit:4234 */
-  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, 4234);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4240);
   }
-  /* ./parser//parser.nit:4236 */
+  /* ./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, 4236);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4242);
   }
-  /* ./parser//parser.nit:4238 */
+  /* ./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, 4238);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4244);
   }
-  /* ./parser//parser.nit:4240 */
+  /* ./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, 4240);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4246);
   }
-  /* ./parser//parser.nit:4242 */
+  /* ./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, 4242);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4248);
   }
-  /* ./parser//parser.nit:4243 */
-  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:4255 */
+  /* ./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:4256 */
+  /* ./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, 4256);
+    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);
@@ -15117,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 = 4259;
+  fra.me.line = 4265;
   fra.me.meth = LOCATE_parser___ReduceAction95___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15125,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:4259 */
+  /* ./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;
@@ -15134,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[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4263;
+  fra.me.line = 4269;
   fra.me.meth = LOCATE_parser___ReduceAction96___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15152,48 +15247,30 @@ 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[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4265 */
+  /* ./parser//parser.nit:4271 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4266 */
+  /* ./parser//parser.nit:4272 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4267 */
+  /* ./parser//parser.nit:4273 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4268 */
+  /* ./parser//parser.nit:4274 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4269 */
+  /* ./parser//parser.nit:4275 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4270 */
+  /* ./parser//parser.nit:4276 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4271 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4272 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4273 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4275 */
-  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, 4275);
-  }
   /* ./parser//parser.nit:4277 */
-  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, 4277);
-  }
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4279 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  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, 4279);
   }
   /* ./parser//parser.nit:4281 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  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, 4281);
@@ -15223,7 +15300,7 @@ void parser___ReduceAction96___action(val_t p0, val_t p1){
     nit_abort("Assert failed", NULL, LOCATE_parser, 4289);
   }
   /* ./parser//parser.nit:4290 */
-  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);
+  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:4303 */
@@ -15263,7 +15340,7 @@ 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[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;
@@ -15271,7 +15348,7 @@ void parser___ReduceAction97___action(val_t p0, val_t p1){
   fra.me.line = 4310;
   fra.me.meth = LOCATE_parser___ReduceAction97___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;
@@ -15280,6 +15357,8 @@ void parser___ReduceAction97___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   /* ./parser//parser.nit:4312 */
@@ -15289,54 +15368,66 @@ void parser___ReduceAction97___action(val_t p0, val_t p1){
   /* ./parser//parser.nit:4314 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4315 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(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:4316 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(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:4317 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(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:4318 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(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:4319 */
-  fra.me.REG[7] = 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:4321 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  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, 4321);
   }
   /* ./parser//parser.nit:4323 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  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, 4323);
   }
   /* ./parser//parser.nit:4325 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  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[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  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, 4327);
   }
   /* ./parser//parser.nit:4329 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  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, 4329);
   }
-  /* ./parser//parser.nit:4330 */
-  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:4342 */
+  /* ./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, 4331);
+  }
+  /* ./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, 4333);
+  }
+  /* ./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:4343 */
+  /* ./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, 4343);
+    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);
@@ -15352,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 = 4346;
+  fra.me.line = 4350;
   fra.me.meth = LOCATE_parser___ReduceAction97___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15360,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:4346 */
+  /* ./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;
@@ -15374,7 +15465,7 @@ void parser___ReduceAction98___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 = 4350;
+  fra.me.line = 4354;
   fra.me.meth = LOCATE_parser___ReduceAction98___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -15389,69 +15480,65 @@ void parser___ReduceAction98___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:4352 */
+  /* ./parser//parser.nit:4356 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4353 */
+  /* ./parser//parser.nit:4357 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4354 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4355 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4356 */
+  /* ./parser//parser.nit:4358 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4357 */
+  /* ./parser//parser.nit:4359 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4358 */
+  /* ./parser//parser.nit:4360 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4359 */
+  /* ./parser//parser.nit:4361 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4360 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4362 */
-  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, 4362);
-  }
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4364 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Assert failed", NULL, LOCATE_parser, 4364);
   }
   /* ./parser//parser.nit:4366 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  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, 4366);
   }
   /* ./parser//parser.nit:4368 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  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, 4368);
   }
   /* ./parser//parser.nit:4370 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  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, 4370);
   }
   /* ./parser//parser.nit:4372 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  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, 4372);
   }
-  /* ./parser//parser.nit:4373 */
-  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:4385 */
+  /* ./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, 4374);
+  }
+  /* ./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:4386 */
+  /* ./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, 4386);
+    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);
@@ -15467,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 = 4389;
+  fra.me.line = 4391;
   fra.me.meth = LOCATE_parser___ReduceAction98___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15475,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:4389 */
+  /* ./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;
@@ -15484,15 +15571,15 @@ void parser___ReduceAction98___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction99___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 = 4393;
+  fra.me.line = 4395;
   fra.me.meth = LOCATE_parser___ReduceAction99___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15502,16 +15589,13 @@ void parser___ReduceAction99___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4395 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4396 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4397 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:4398 */
-  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:4399 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4400 */
@@ -15522,51 +15606,59 @@ void parser___ReduceAction99___action(val_t p0, val_t p1){
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4403 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4405 */
-  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:4404 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 4405);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4406);
   }
-  /* ./parser//parser.nit:4407 */
-  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: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, 4407);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4408);
   }
-  /* ./parser//parser.nit:4409 */
+  /* ./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, 4410);
+  }
+  /* ./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, 4409);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4412);
   }
-  /* ./parser//parser.nit:4411 */
+  /* ./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, 4411);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4414);
   }
-  /* ./parser//parser.nit:4413 */
+  /* ./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, 4413);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4416);
   }
-  /* ./parser//parser.nit:4415 */
-  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: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, 4415);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4418);
   }
-  /* ./parser//parser.nit:4416 */
-  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:4428 */
+  /* ./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:4429 */
+  /* ./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, 4429);
+    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);
@@ -15582,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 = 4432;
+  fra.me.line = 4435;
   fra.me.meth = LOCATE_parser___ReduceAction99___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15590,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:4432 */
+  /* ./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;
@@ -15604,7 +15696,7 @@ void parser___ReduceAction100___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 = 4436;
+  fra.me.line = 4439;
   fra.me.meth = LOCATE_parser___ReduceAction100___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -15620,77 +15712,73 @@ void parser___ReduceAction100___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:4438 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4439 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4440 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4441 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:4442 */
-  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:4443 */
-  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:4444 */
-  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:4445 */
-  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:4446 */
-  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:4447 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4448 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4449 */
+  /* ./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, 4449);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4450);
   }
-  /* ./parser//parser.nit:4451 */
+  /* ./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, 4451);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4452);
   }
-  /* ./parser//parser.nit:4453 */
-  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, 4453);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4454);
   }
-  /* ./parser//parser.nit:4455 */
+  /* ./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, 4455);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4456);
   }
-  /* ./parser//parser.nit:4457 */
+  /* ./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, 4457);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4458);
   }
-  /* ./parser//parser.nit:4459 */
+  /* ./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, 4459);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4460);
   }
-  /* ./parser//parser.nit:4461 */
-  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: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, 4461);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4462);
   }
-  /* ./parser//parser.nit:4462 */
-  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:4474 */
-  fra.me.REG[2] = fra.me.REG[3];
+  /* ./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: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, 4475);
+    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);
@@ -15706,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 = 4478;
+  fra.me.line = 4479;
   fra.me.meth = LOCATE_parser___ReduceAction100___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15714,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:4478 */
+  /* ./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;
@@ -15723,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[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 = 4482;
+  fra.me.line = 4483;
   fra.me.meth = LOCATE_parser___ReduceAction101___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;
@@ -15741,71 +15829,85 @@ void parser___ReduceAction101___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:4484 */
-  fra.me.REG[2] = NIT_NULL;
   /* ./parser//parser.nit:4485 */
-  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:4486 */
-  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:4487 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4488 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4489 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4490 */
+  /* ./parser//parser.nit:4489 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4491 */
+  /* ./parser//parser.nit:4490 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4492 */
+  /* ./parser//parser.nit:4491 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4494 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4492 */
+  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, 4494);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4495);
   }
-  /* ./parser//parser.nit:4496 */
-  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: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, 4496);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4497);
   }
-  /* ./parser//parser.nit:4498 */
+  /* ./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, 4501);
+  }
+  /* ./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, 4498);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4503);
   }
-  /* ./parser//parser.nit:4500 */
+  /* ./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, 4500);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4505);
   }
-  /* ./parser//parser.nit:4502 */
+  /* ./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, 4502);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4507);
   }
-  /* ./parser//parser.nit:4504 */
-  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, 4504);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4509);
   }
-  /* ./parser//parser.nit:4505 */
-  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:4517 */
+  /* ./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:4518 */
+  /* ./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, 4518);
+    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);
@@ -15821,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 = 4521;
+  fra.me.line = 4526;
   fra.me.meth = LOCATE_parser___ReduceAction101___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15829,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:4521 */
+  /* ./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;
@@ -15838,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[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4525;
+  fra.me.line = 4530;
   fra.me.meth = LOCATE_parser___ReduceAction102___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15855,81 +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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4527 */
+  /* ./parser//parser.nit:4532 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4528 */
+  /* ./parser//parser.nit:4533 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4529 */
+  /* ./parser//parser.nit:4534 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4530 */
+  /* ./parser//parser.nit:4535 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4531 */
+  /* ./parser//parser.nit:4536 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4532 */
+  /* ./parser//parser.nit:4537 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4533 */
+  /* ./parser//parser.nit:4538 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4534 */
+  /* ./parser//parser.nit:4539 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4535 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4536 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4538 */
-  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, 4538);
-  }
-  /* ./parser//parser.nit:4540 */
-  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, 4540);
-  }
-  /* ./parser//parser.nit:4542 */
-  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, 4542);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4541);
   }
-  /* ./parser//parser.nit:4544 */
+  /* ./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, 4544);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4543);
   }
-  /* ./parser//parser.nit:4546 */
+  /* ./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, 4546);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4545);
   }
-  /* ./parser//parser.nit:4548 */
+  /* ./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, 4548);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4547);
   }
-  /* ./parser//parser.nit:4550 */
+  /* ./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, 4550);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4549);
   }
-  /* ./parser//parser.nit:4551 */
-  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:4563 */
+  /* ./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:4564 */
+  /* ./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, 4564);
+    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);
@@ -15945,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 = 4567;
+  fra.me.line = 4566;
   fra.me.meth = LOCATE_parser___ReduceAction102___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15953,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:4567 */
+  /* ./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;
@@ -15962,15 +16046,15 @@ void parser___ReduceAction102___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction103___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 = 4571;
+  fra.me.line = 4570;
   fra.me.meth = LOCATE_parser___ReduceAction103___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15980,80 +16064,71 @@ void parser___ReduceAction103___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4573 */
+  /* ./parser//parser.nit:4572 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4574 */
+  /* ./parser//parser.nit:4573 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4574 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4575 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4576 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4577 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4578 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4579 */
+  /* ./parser//parser.nit:4578 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4580 */
+  /* ./parser//parser.nit:4579 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4581 */
+  /* ./parser//parser.nit:4580 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4582 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4582);
+  }
   /* ./parser//parser.nit:4584 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  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, 4584);
   }
   /* ./parser//parser.nit:4586 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  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, 4586);
   }
   /* ./parser//parser.nit:4588 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  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, 4588);
   }
   /* ./parser//parser.nit:4590 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  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, 4590);
   }
   /* ./parser//parser.nit:4592 */
-  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, 4592);
-  }
-  /* ./parser//parser.nit:4594 */
-  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, 4594);
-  }
-  /* ./parser//parser.nit:4596 */
   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, 4596);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4592);
   }
-  /* ./parser//parser.nit:4597 */
-  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:4609 */
+  /* ./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:4610 */
+  /* ./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, 4610);
+    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);
@@ -16069,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 = 4613;
+  fra.me.line = 4609;
   fra.me.meth = LOCATE_parser___ReduceAction103___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16077,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:4613 */
+  /* ./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;
@@ -16086,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[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4617;
+  fra.me.line = 4613;
   fra.me.meth = LOCATE_parser___ReduceAction104___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16104,89 +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[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4619 */
+  /* ./parser//parser.nit:4615 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4620 */
+  /* ./parser//parser.nit:4616 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4621 */
+  /* ./parser//parser.nit:4617 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4622 */
+  /* ./parser//parser.nit:4618 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4623 */
+  /* ./parser//parser.nit:4619 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4624 */
+  /* ./parser//parser.nit:4620 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4625 */
+  /* ./parser//parser.nit:4621 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4626 */
+  /* ./parser//parser.nit:4622 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4627 */
+  /* ./parser//parser.nit:4623 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4628 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4629 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4631 */
-  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, 4631);
-  }
-  /* ./parser//parser.nit:4633 */
-  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, 4633);
-  }
-  /* ./parser//parser.nit:4635 */
-  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, 4635);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4625);
   }
-  /* ./parser//parser.nit:4637 */
-  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, 4637);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4627);
   }
-  /* ./parser//parser.nit:4639 */
+  /* ./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, 4639);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4629);
   }
-  /* ./parser//parser.nit:4641 */
+  /* ./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, 4641);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4631);
   }
-  /* ./parser//parser.nit:4643 */
+  /* ./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, 4643);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4633);
   }
-  /* ./parser//parser.nit:4645 */
+  /* ./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, 4645);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4635);
   }
-  /* ./parser//parser.nit:4646 */
-  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:4658 */
+  /* ./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:4659 */
+  /* ./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, 4659);
+    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);
@@ -16202,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 = 4662;
+  fra.me.line = 4652;
   fra.me.meth = LOCATE_parser___ReduceAction104___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16210,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:4662 */
+  /* ./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;
@@ -16219,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 = 4666;
+  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;
@@ -16237,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:4668 */
+  /* ./parser//parser.nit:4658 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4669 */
+  /* ./parser//parser.nit:4659 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4670 */
+  /* ./parser//parser.nit:4660 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4671 */
+  /* ./parser//parser.nit:4661 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4672 */
+  /* ./parser//parser.nit:4662 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4673 */
+  /* ./parser//parser.nit:4663 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4674 */
+  /* ./parser//parser.nit:4664 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4675 */
+  /* ./parser//parser.nit:4665 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4676 */
+  /* ./parser//parser.nit:4666 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4678 */
-  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, 4678);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4669);
   }
-  /* ./parser//parser.nit:4680 */
-  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: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, 4680);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4671);
   }
-  /* ./parser//parser.nit:4682 */
-  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: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, 4682);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4673);
   }
-  /* ./parser//parser.nit:4684 */
-  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: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, 4684);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4675);
   }
-  /* ./parser//parser.nit:4686 */
-  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: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, 4677);
+  }
+  /* ./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, 4686);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4679);
   }
-  /* ./parser//parser.nit:4688 */
+  /* ./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, 4688);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4681);
   }
-  /* ./parser//parser.nit:4689 */
-  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:4701 */
+  /* ./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:4702 */
+  /* ./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, 4702);
+    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);
@@ -16317,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 = 4705;
+  fra.me.line = 4698;
   fra.me.meth = LOCATE_parser___ReduceAction105___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16325,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:4705 */
+  /* ./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;
@@ -16334,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 = 4709;
+  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;
@@ -16352,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:4711 */
+  /* ./parser//parser.nit:4704 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4712 */
+  /* ./parser//parser.nit:4705 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4713 */
+  /* ./parser//parser.nit:4706 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4714 */
+  /* ./parser//parser.nit:4707 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4715 */
+  /* ./parser//parser.nit:4708 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4716 */
+  /* ./parser//parser.nit:4709 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4717 */
+  /* ./parser//parser.nit:4710 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4718 */
+  /* ./parser//parser.nit:4711 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4719 */
+  /* ./parser//parser.nit:4712 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4720 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4722 */
-  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, 4722);
-  }
-  /* ./parser//parser.nit:4724 */
-  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: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, 4724);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4714);
   }
-  /* ./parser//parser.nit:4726 */
-  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: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, 4726);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4716);
   }
-  /* ./parser//parser.nit:4728 */
-  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: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, 4728);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4718);
   }
-  /* ./parser//parser.nit:4730 */
-  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: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, 4730);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4720);
   }
-  /* ./parser//parser.nit:4732 */
-  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: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, 4732);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4722);
   }
-  /* ./parser//parser.nit:4734 */
+  /* ./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, 4734);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4724);
   }
-  /* ./parser//parser.nit:4735 */
-  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:4747 */
+  /* ./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:4748 */
+  /* ./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, 4748);
+    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);
@@ -16441,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 = 4751;
+  fra.me.line = 4741;
   fra.me.meth = LOCATE_parser___ReduceAction106___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16449,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:4751 */
+  /* ./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;
@@ -16463,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 = 4755;
+  fra.me.line = 4745;
   fra.me.meth = LOCATE_parser___ReduceAction107___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -16479,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:4757 */
+  /* ./parser//parser.nit:4747 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4758 */
+  /* ./parser//parser.nit:4748 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4759 */
+  /* ./parser//parser.nit:4749 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4760 */
+  /* ./parser//parser.nit:4750 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4761 */
+  /* ./parser//parser.nit:4751 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4762 */
+  /* ./parser//parser.nit:4752 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4763 */
+  /* ./parser//parser.nit:4753 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4764 */
+  /* ./parser//parser.nit:4754 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4765 */
+  /* ./parser//parser.nit:4755 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4766 */
+  /* ./parser//parser.nit:4756 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4768 */
+  /* ./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, 4768);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4758);
   }
-  /* ./parser//parser.nit:4770 */
+  /* ./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, 4770);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4760);
   }
-  /* ./parser//parser.nit:4772 */
-  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: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, 4772);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4762);
   }
-  /* ./parser//parser.nit:4774 */
-  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: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, 4774);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4764);
   }
-  /* ./parser//parser.nit:4776 */
-  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: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, 4776);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4766);
   }
-  /* ./parser//parser.nit:4778 */
-  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: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, 4778);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4768);
   }
-  /* ./parser//parser.nit:4780 */
+  /* ./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, 4780);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4770);
   }
-  /* ./parser//parser.nit:4781 */
-  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:4793 */
+  /* ./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:4794 */
+  /* ./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, 4794);
+    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);
@@ -16565,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 = 4797;
+  fra.me.line = 4787;
   fra.me.meth = LOCATE_parser___ReduceAction107___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16573,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:4797 */
+  /* ./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;
@@ -16582,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 = 4801;
+  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;
@@ -16601,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:4803 */
+  /* ./parser//parser.nit:4793 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4804 */
+  /* ./parser//parser.nit:4794 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4805 */
+  /* ./parser//parser.nit:4795 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4806 */
+  /* ./parser//parser.nit:4796 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4807 */
+  /* ./parser//parser.nit:4797 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4808 */
+  /* ./parser//parser.nit:4798 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4809 */
+  /* ./parser//parser.nit:4799 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4810 */
+  /* ./parser//parser.nit:4800 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4811 */
+  /* ./parser//parser.nit:4801 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4812 */
+  /* ./parser//parser.nit:4802 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4813 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4815 */
-  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, 4815);
-  }
-  /* ./parser//parser.nit:4817 */
-  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, 4817);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4804);
   }
-  /* ./parser//parser.nit:4819 */
-  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: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, 4819);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4806);
   }
-  /* ./parser//parser.nit:4821 */
-  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: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, 4821);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4808);
   }
-  /* ./parser//parser.nit:4823 */
-  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: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, 4823);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4810);
   }
-  /* ./parser//parser.nit:4825 */
-  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: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, 4825);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4812);
   }
-  /* ./parser//parser.nit:4827 */
-  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: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, 4827);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4814);
   }
-  /* ./parser//parser.nit:4829 */
+  /* ./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, 4829);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4816);
   }
-  /* ./parser//parser.nit:4830 */
-  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:4842 */
+  /* ./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:4843 */
+  /* ./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, 4843);
+    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);
@@ -16698,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 = 4846;
+  fra.me.line = 4833;
   fra.me.meth = LOCATE_parser___ReduceAction108___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16706,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:4846 */
+  /* ./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;
@@ -16715,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[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 = 4850;
+  fra.me.line = 4837;
   fra.me.meth = LOCATE_parser___ReduceAction109___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;
@@ -16734,79 +16782,88 @@ void parser___ReduceAction109___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:4852 */
+  /* ./parser//parser.nit:4839 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4853 */
+  /* ./parser//parser.nit:4840 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4854 */
+  /* ./parser//parser.nit:4841 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4855 */
+  /* ./parser//parser.nit:4842 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4856 */
+  /* ./parser//parser.nit:4843 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4857 */
+  /* ./parser//parser.nit:4844 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4858 */
+  /* ./parser//parser.nit:4845 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4859 */
+  /* ./parser//parser.nit:4846 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4860 */
+  /* ./parser//parser.nit:4847 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4861 */
+  /* ./parser//parser.nit:4848 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4863 */
-  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: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, 4863);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4851);
   }
-  /* ./parser//parser.nit:4865 */
+  /* ./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, 4853);
+  }
+  /* ./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, 4865);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4855);
   }
-  /* ./parser//parser.nit:4867 */
-  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: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, 4867);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4857);
   }
-  /* ./parser//parser.nit:4869 */
-  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: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, 4869);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4859);
   }
-  /* ./parser//parser.nit:4871 */
-  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: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, 4871);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4861);
   }
-  /* ./parser//parser.nit:4873 */
-  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: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, 4873);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4863);
   }
-  /* ./parser//parser.nit:4875 */
+  /* ./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, 4875);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4865);
   }
-  /* ./parser//parser.nit:4876 */
-  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:4888 */
+  /* ./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:4889 */
+  /* ./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, 4889);
+    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);
@@ -16822,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 = 4892;
+  fra.me.line = 4882;
   fra.me.meth = LOCATE_parser___ReduceAction109___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16830,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:4892 */
+  /* ./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;
@@ -16839,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[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4896;
+  fra.me.line = 4886;
   fra.me.meth = LOCATE_parser___ReduceAction110___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16857,89 +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[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4898 */
+  /* ./parser//parser.nit:4888 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4899 */
+  /* ./parser//parser.nit:4889 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4900 */
+  /* ./parser//parser.nit:4890 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4901 */
+  /* ./parser//parser.nit:4891 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4902 */
+  /* ./parser//parser.nit:4892 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4903 */
+  /* ./parser//parser.nit:4893 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4904 */
+  /* ./parser//parser.nit:4894 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4905 */
+  /* ./parser//parser.nit:4895 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4906 */
+  /* ./parser//parser.nit:4896 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4907 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4908 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4910 */
-  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, 4910);
-  }
-  /* ./parser//parser.nit:4912 */
-  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, 4912);
-  }
-  /* ./parser//parser.nit:4914 */
-  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, 4914);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4898);
   }
-  /* ./parser//parser.nit:4916 */
+  /* ./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, 4916);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4900);
   }
-  /* ./parser//parser.nit:4918 */
+  /* ./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, 4918);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4902);
   }
-  /* ./parser//parser.nit:4920 */
+  /* ./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, 4920);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4904);
   }
-  /* ./parser//parser.nit:4922 */
+  /* ./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, 4922);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4906);
   }
-  /* ./parser//parser.nit:4924 */
+  /* ./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, 4924);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4908);
   }
-  /* ./parser//parser.nit:4925 */
-  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:4937 */
+  /* ./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:4938 */
+  /* ./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, 4938);
+    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);
@@ -16955,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 = 4941;
+  fra.me.line = 4925;
   fra.me.meth = LOCATE_parser___ReduceAction110___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16963,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:4941 */
+  /* ./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;
@@ -16972,15 +17011,15 @@ void parser___ReduceAction110___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction111___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4945;
+  fra.me.line = 4929;
   fra.me.meth = LOCATE_parser___ReduceAction111___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16991,88 +17030,79 @@ void parser___ReduceAction111___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4947 */
+  /* ./parser//parser.nit:4931 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4948 */
+  /* ./parser//parser.nit:4932 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4949 */
+  /* ./parser//parser.nit:4933 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4950 */
+  /* ./parser//parser.nit:4934 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4951 */
+  /* ./parser//parser.nit:4935 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4952 */
+  /* ./parser//parser.nit:4936 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4953 */
+  /* ./parser//parser.nit:4937 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4954 */
+  /* ./parser//parser.nit:4938 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4955 */
+  /* ./parser//parser.nit:4939 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4956 */
+  /* ./parser//parser.nit:4940 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4957 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4959 */
-  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, 4959);
-  }
-  /* ./parser//parser.nit:4961 */
-  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: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, 4961);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4942);
   }
-  /* ./parser//parser.nit:4963 */
-  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, 4963);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4944);
   }
-  /* ./parser//parser.nit:4965 */
+  /* ./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, 4965);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4946);
   }
-  /* ./parser//parser.nit:4967 */
+  /* ./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, 4967);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4948);
   }
-  /* ./parser//parser.nit:4969 */
+  /* ./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, 4969);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4950);
   }
-  /* ./parser//parser.nit:4971 */
+  /* ./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, 4971);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4952);
   }
-  /* ./parser//parser.nit:4973 */
+  /* ./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, 4973);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4954);
   }
-  /* ./parser//parser.nit:4974 */
-  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:4986 */
+  /* ./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:4987 */
+  /* ./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, 4987);
+    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);
@@ -17088,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 = 4990;
+  fra.me.line = 4971;
   fra.me.meth = LOCATE_parser___ReduceAction111___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17096,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:4990 */
+  /* ./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;
@@ -17105,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[11];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4994;
+  fra.me.line = 4975;
   fra.me.meth = LOCATE_parser___ReduceAction112___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17124,97 +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[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4996 */
+  /* ./parser//parser.nit:4977 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4997 */
+  /* ./parser//parser.nit:4978 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4998 */
+  /* ./parser//parser.nit:4979 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4999 */
+  /* ./parser//parser.nit:4980 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5000 */
+  /* ./parser//parser.nit:4981 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5001 */
+  /* ./parser//parser.nit:4982 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5002 */
+  /* ./parser//parser.nit:4983 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5003 */
+  /* ./parser//parser.nit:4984 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5004 */
+  /* ./parser//parser.nit:4985 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5005 */
+  /* ./parser//parser.nit:4986 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5006 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5007 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5009 */
-  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, 5009);
-  }
-  /* ./parser//parser.nit:5011 */
-  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, 5011);
-  }
-  /* ./parser//parser.nit:5013 */
-  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, 5013);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4988);
   }
-  /* ./parser//parser.nit:5015 */
-  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, 5015);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4990);
   }
-  /* ./parser//parser.nit:5017 */
+  /* ./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, 5017);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4992);
   }
-  /* ./parser//parser.nit:5019 */
+  /* ./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, 5019);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4994);
   }
-  /* ./parser//parser.nit:5021 */
+  /* ./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, 5021);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4996);
   }
-  /* ./parser//parser.nit:5023 */
+  /* ./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, 5023);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4998);
   }
-  /* ./parser//parser.nit:5025 */
+  /* ./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, 5025);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5000);
   }
-  /* ./parser//parser.nit:5026 */
-  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:5038 */
+  /* ./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:5039 */
+  /* ./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, 5039);
+    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);
@@ -17230,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 = 5042;
+  fra.me.line = 5017;
   fra.me.meth = LOCATE_parser___ReduceAction112___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17238,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:5042 */
+  /* ./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;
@@ -17247,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[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 = 5046;
+  fra.me.line = 5021;
   fra.me.meth = LOCATE_parser___ReduceAction113___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17263,51 +17275,91 @@ void parser___ReduceAction113___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5048 */
+  /* ./parser//parser.nit:5023 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5049 */
+  /* ./parser//parser.nit:5024 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5050 */
+  /* ./parser//parser.nit:5025 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5026 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5027 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5051 */
+  /* ./parser//parser.nit:5028 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5052 */
+  /* ./parser//parser.nit:5029 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5054 */
-  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:5030 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5031 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5032 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 5054);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5035);
   }
-  /* ./parser//parser.nit:5056 */
-  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: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, 5056);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5037);
   }
-  /* ./parser//parser.nit:5058 */
-  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: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, 5058);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5039);
   }
-  /* ./parser//parser.nit:5060 */
-  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: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, 5060);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5041);
   }
-  /* ./parser//parser.nit:5061 */
-  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:5073 */
+  /* ./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, 5043);
+  }
+  /* ./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, 5045);
+  }
+  /* ./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, 5047);
+  }
+  /* ./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, 5049);
+  }
+  /* ./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:5074 */
+  /* ./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, 5074);
+    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);
@@ -17323,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 = 5077;
+  fra.me.line = 5066;
   fra.me.meth = LOCATE_parser___ReduceAction113___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17331,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:5077 */
+  /* ./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;
@@ -17340,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[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 = 5081;
+  fra.me.line = 5070;
   fra.me.meth = LOCATE_parser___ReduceAction114___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17357,59 +17409,81 @@ void parser___ReduceAction114___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5083 */
+  /* ./parser//parser.nit:5072 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5084 */
+  /* ./parser//parser.nit:5073 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5085 */
+  /* ./parser//parser.nit:5074 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5086 */
+  /* ./parser//parser.nit:5075 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5076 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5077 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5087 */
+  /* ./parser//parser.nit:5078 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5088 */
+  /* ./parser//parser.nit:5079 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5090 */
-  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:5080 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5081 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 5090);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5083);
   }
-  /* ./parser//parser.nit:5092 */
-  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: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, 5092);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5085);
   }
-  /* ./parser//parser.nit:5094 */
-  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: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, 5094);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5087);
   }
-  /* ./parser//parser.nit:5096 */
-  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: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, 5096);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5089);
   }
-  /* ./parser//parser.nit:5098 */
-  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: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, 5098);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5091);
   }
-  /* ./parser//parser.nit:5099 */
-  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:5111 */
+  /* ./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, 5093);
+  }
+  /* ./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, 5095);
+  }
+  /* ./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:5112 */
+  /* ./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, 5112);
+    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);
@@ -17425,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 = 5115;
+  fra.me.line = 5112;
   fra.me.meth = LOCATE_parser___ReduceAction114___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17433,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:5115 */
+  /* ./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;
@@ -17442,15 +17516,15 @@ void parser___ReduceAction114___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction115___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5119;
+  fra.me.line = 5116;
   fra.me.meth = LOCATE_parser___ReduceAction115___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17459,59 +17533,90 @@ void parser___ReduceAction115___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5121 */
+  /* ./parser//parser.nit:5118 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5122 */
+  /* ./parser//parser.nit:5119 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5123 */
+  /* ./parser//parser.nit:5120 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5124 */
+  /* ./parser//parser.nit:5121 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5122 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5123 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5125 */
+  /* ./parser//parser.nit:5124 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5126 */
+  /* ./parser//parser.nit:5125 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5126 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5127 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:5128 */
-  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, 5128);
-  }
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:5130 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  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, 5130);
   }
   /* ./parser//parser.nit:5132 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  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, 5132);
   }
   /* ./parser//parser.nit:5134 */
-  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[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, 5134);
   }
   /* ./parser//parser.nit:5136 */
-  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[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, 5136);
   }
-  /* ./parser//parser.nit:5137 */
-  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:5149 */
+  /* ./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, 5138);
+  }
+  /* ./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, 5140);
+  }
+  /* ./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, 5142);
+  }
+  /* ./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, 5144);
+  }
+  /* ./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:5150 */
+  /* ./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, 5150);
+    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);
@@ -17527,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 = 5153;
+  fra.me.line = 5161;
   fra.me.meth = LOCATE_parser___ReduceAction115___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17535,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:5153 */
+  /* ./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;
@@ -17544,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[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 = 5157;
+  fra.me.line = 5165;
   fra.me.meth = LOCATE_parser___ReduceAction116___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17562,67 +17667,89 @@ void parser___ReduceAction116___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5159 */
+  /* ./parser//parser.nit:5167 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5160 */
+  /* ./parser//parser.nit:5168 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5161 */
+  /* ./parser//parser.nit:5169 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5170 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5171 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5162 */
+  /* ./parser//parser.nit:5172 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5163 */
+  /* ./parser//parser.nit:5173 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5164 */
+  /* ./parser//parser.nit:5174 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5165 */
+  /* ./parser//parser.nit:5175 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5167 */
-  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:5176 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5177 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 5167);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5179);
   }
-  /* ./parser//parser.nit:5169 */
-  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: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, 5169);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5181);
   }
-  /* ./parser//parser.nit:5171 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./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, 5171);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5183);
   }
-  /* ./parser//parser.nit:5173 */
-  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: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, 5173);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5185);
   }
-  /* ./parser//parser.nit:5175 */
-  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: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, 5175);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5187);
   }
-  /* ./parser//parser.nit:5177 */
-  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: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, 5177);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5189);
   }
-  /* ./parser//parser.nit:5178 */
-  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:5190 */
-  fra.me.REG[2] = fra.me.REG[3];
   /* ./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, 5191);
+  }
+  /* ./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, 5193);
+  }
+  /* ./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: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, 5191);
+    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);
@@ -17638,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 = 5194;
+  fra.me.line = 5210;
   fra.me.meth = LOCATE_parser___ReduceAction116___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17646,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:5194 */
+  /* ./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;
@@ -17655,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[7];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5198;
+  fra.me.line = 5214;
   fra.me.meth = LOCATE_parser___ReduceAction117___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 12;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17672,59 +17799,99 @@ void parser___ReduceAction117___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5200 */
+  /* ./parser//parser.nit:5216 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5201 */
+  /* ./parser//parser.nit:5217 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5202 */
+  /* ./parser//parser.nit:5218 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5203 */
+  /* ./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:5221 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5204 */
+  /* ./parser//parser.nit:5222 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5205 */
+  /* ./parser//parser.nit:5223 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5207 */
-  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: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, 5207);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5229);
   }
-  /* ./parser//parser.nit:5209 */
-  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: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, 5209);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5231);
   }
-  /* ./parser//parser.nit:5211 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./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, 5211);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5233);
   }
-  /* ./parser//parser.nit:5213 */
-  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: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, 5213);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5235);
   }
-  /* ./parser//parser.nit:5215 */
-  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: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, 5215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5237);
   }
-  /* ./parser//parser.nit:5216 */
-  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:5228 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5229 */
+  /* ./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: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, 5229);
+    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);
@@ -17740,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 = 5232;
+  fra.me.line = 5262;
   fra.me.meth = LOCATE_parser___ReduceAction117___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17748,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:5232 */
+  /* ./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;
@@ -17757,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[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 = 5236;
+  fra.me.line = 5266;
   fra.me.meth = LOCATE_parser___ReduceAction118___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17773,69 +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[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5238 */
+  /* ./parser//parser.nit:5268 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5239 */
+  /* ./parser//parser.nit:5269 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5240 */
+  /* ./parser//parser.nit:5270 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5241 */
+  /* ./parser//parser.nit:5271 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5242 */
+  /* ./parser//parser.nit:5272 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5243 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5244 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5246 */
-  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, 5246);
-  }
-  /* ./parser//parser.nit:5248 */
-  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, 5248);
-  }
-  /* ./parser//parser.nit:5250 */
-  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: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, 5250);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5274);
   }
-  /* ./parser//parser.nit:5252 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./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, 5252);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5276);
   }
-  /* ./parser//parser.nit:5254 */
-  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: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, 5254);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5278);
   }
-  /* ./parser//parser.nit:5256 */
-  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: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, 5256);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5280);
   }
-  /* ./parser//parser.nit:5257 */
-  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:5269 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5270 */
+  /* ./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: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, 5270);
+    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);
@@ -17851,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 = 5273;
+  fra.me.line = 5297;
   fra.me.meth = LOCATE_parser___ReduceAction118___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17859,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:5273 */
+  /* ./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;
@@ -17868,15 +18017,15 @@ void parser___ReduceAction118___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction119___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5277;
+  fra.me.line = 5301;
   fra.me.meth = LOCATE_parser___ReduceAction119___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17885,68 +18034,59 @@ void parser___ReduceAction119___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5279 */
+  /* ./parser//parser.nit:5303 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5280 */
+  /* ./parser//parser.nit:5304 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5281 */
+  /* ./parser//parser.nit:5305 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5282 */
+  /* ./parser//parser.nit:5306 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5283 */
+  /* ./parser//parser.nit:5307 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5284 */
+  /* ./parser//parser.nit:5308 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5285 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5287 */
-  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, 5287);
-  }
-  /* ./parser//parser.nit:5289 */
-  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: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, 5289);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5310);
   }
-  /* ./parser//parser.nit:5291 */
-  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: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, 5291);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5312);
   }
-  /* ./parser//parser.nit:5293 */
-  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: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, 5293);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5314);
   }
-  /* ./parser//parser.nit:5295 */
-  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: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, 5295);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5316);
   }
-  /* ./parser//parser.nit:5297 */
-  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: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, 5297);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5318);
   }
-  /* ./parser//parser.nit:5298 */
-  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:5310 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5311 */
+  /* ./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: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, 5311);
+    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);
@@ -17962,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 = 5314;
+  fra.me.line = 5335;
   fra.me.meth = LOCATE_parser___ReduceAction119___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17970,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:5314 */
+  /* ./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;
@@ -17979,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[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5318;
+  fra.me.line = 5339;
   fra.me.meth = LOCATE_parser___ReduceAction120___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17996,77 +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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5320 */
+  /* ./parser//parser.nit:5341 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5321 */
+  /* ./parser//parser.nit:5342 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5322 */
+  /* ./parser//parser.nit:5343 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5323 */
+  /* ./parser//parser.nit:5344 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5324 */
+  /* ./parser//parser.nit:5345 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5325 */
+  /* ./parser//parser.nit:5346 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5326 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5327 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5329 */
-  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, 5329);
-  }
-  /* ./parser//parser.nit:5331 */
-  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, 5331);
-  }
-  /* ./parser//parser.nit:5333 */
-  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: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, 5333);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5348);
   }
-  /* ./parser//parser.nit:5335 */
-  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: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, 5335);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5350);
   }
-  /* ./parser//parser.nit:5337 */
-  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: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, 5337);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5352);
   }
-  /* ./parser//parser.nit:5339 */
-  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: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, 5339);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5354);
   }
-  /* ./parser//parser.nit:5341 */
-  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: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, 5341);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5356);
   }
-  /* ./parser//parser.nit:5342 */
-  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:5354 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5355 */
+  /* ./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: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, 5355);
+    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);
@@ -18082,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 = 5358;
+  fra.me.line = 5373;
   fra.me.meth = LOCATE_parser___ReduceAction120___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18090,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:5358 */
+  /* ./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;
@@ -18099,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 = 5362;
+  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;
@@ -18116,63 +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:5364 */
+  /* ./parser//parser.nit:5379 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5365 */
+  /* ./parser//parser.nit:5380 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5366 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5367 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5368 */
+  /* ./parser//parser.nit:5381 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5369 */
+  /* ./parser//parser.nit:5382 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5370 */
+  /* ./parser//parser.nit:5383 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5371 */
+  /* ./parser//parser.nit:5384 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5373 */
-  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, 5387);
+  }
+  /* ./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, 5373);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5389);
   }
-  /* ./parser//parser.nit:5375 */
+  /* ./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, 5375);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5391);
   }
-  /* ./parser//parser.nit:5377 */
+  /* ./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, 5377);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5393);
   }
-  /* ./parser//parser.nit:5379 */
+  /* ./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, 5379);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5395);
   }
-  /* ./parser//parser.nit:5381 */
-  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: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, 5381);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5397);
   }
-  /* ./parser//parser.nit:5382 */
-  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:5394 */
+  /* ./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:5395 */
+  /* ./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, 5395);
+    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);
@@ -18188,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 = 5398;
+  fra.me.line = 5414;
   fra.me.meth = LOCATE_parser___ReduceAction121___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18196,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:5398 */
+  /* ./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;
@@ -18205,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 = 5402;
+  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;
@@ -18222,72 +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:5404 */
+  /* ./parser//parser.nit:5420 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5405 */
+  /* ./parser//parser.nit:5421 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5406 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5407 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5408 */
+  /* ./parser//parser.nit:5422 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5409 */
+  /* ./parser//parser.nit:5423 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5410 */
+  /* ./parser//parser.nit:5424 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5411 */
+  /* ./parser//parser.nit:5425 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5412 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5414 */
-  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, 5414);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5427);
   }
-  /* ./parser//parser.nit:5416 */
-  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: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, 5416);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5429);
   }
-  /* ./parser//parser.nit:5418 */
+  /* ./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, 5418);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5431);
   }
-  /* ./parser//parser.nit:5420 */
+  /* ./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, 5420);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5433);
   }
-  /* ./parser//parser.nit:5422 */
+  /* ./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, 5422);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5435);
   }
-  /* ./parser//parser.nit:5424 */
-  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, 5424);
-  }
-  /* ./parser//parser.nit:5425 */
-  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:5437 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5438 */
+  /* ./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: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, 5438);
+    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);
@@ -18303,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 = 5441;
+  fra.me.line = 5452;
   fra.me.meth = LOCATE_parser___ReduceAction122___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18311,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:5441 */
+  /* ./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;
@@ -18325,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 = 5445;
+  fra.me.line = 5456;
   fra.me.meth = LOCATE_parser___ReduceAction123___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -18340,69 +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:5447 */
+  /* ./parser//parser.nit:5458 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5448 */
+  /* ./parser//parser.nit:5459 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5449 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5450 */
+  /* ./parser//parser.nit:5460 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5451 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5452 */
+  /* ./parser//parser.nit:5461 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5453 */
+  /* ./parser//parser.nit:5462 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5454 */
+  /* ./parser//parser.nit:5463 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5455 */
+  /* ./parser//parser.nit:5464 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5457 */
+  /* ./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, 5457);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5466);
   }
-  /* ./parser//parser.nit:5459 */
-  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: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, 5459);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5468);
   }
-  /* ./parser//parser.nit:5461 */
-  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: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, 5461);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5470);
   }
-  /* ./parser//parser.nit:5463 */
-  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: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, 5463);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5472);
   }
-  /* ./parser//parser.nit:5465 */
-  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: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, 5465);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5474);
   }
-  /* ./parser//parser.nit:5467 */
-  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: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, 5467);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5476);
   }
-  /* ./parser//parser.nit:5468 */
-  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:5480 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5481 */
+  /* ./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: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, 5481);
+    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);
@@ -18418,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 = 5484;
+  fra.me.line = 5493;
   fra.me.meth = LOCATE_parser___ReduceAction123___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18426,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:5484 */
+  /* ./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;
@@ -18435,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 = 5488;
+  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;
@@ -18453,80 +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:5490 */
+  /* ./parser//parser.nit:5499 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5491 */
+  /* ./parser//parser.nit:5500 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5492 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5493 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5494 */
+  /* ./parser//parser.nit:5501 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5495 */
+  /* ./parser//parser.nit:5502 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5496 */
+  /* ./parser//parser.nit:5503 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5497 */
+  /* ./parser//parser.nit:5504 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5498 */
+  /* ./parser//parser.nit:5505 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5499 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5501 */
-  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, 5501);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5507);
   }
-  /* ./parser//parser.nit:5503 */
-  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: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, 5503);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5509);
   }
-  /* ./parser//parser.nit:5505 */
+  /* ./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, 5505);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5511);
   }
-  /* ./parser//parser.nit:5507 */
+  /* ./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, 5507);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5513);
   }
-  /* ./parser//parser.nit:5509 */
+  /* ./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, 5509);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5515);
   }
-  /* ./parser//parser.nit:5511 */
+  /* ./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, 5511);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5517);
   }
-  /* ./parser//parser.nit:5513 */
-  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, 5513);
-  }
-  /* ./parser//parser.nit:5514 */
-  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:5526 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5527 */
+  /* ./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: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, 5527);
+    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);
@@ -18542,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 = 5530;
+  fra.me.line = 5534;
   fra.me.meth = LOCATE_parser___ReduceAction124___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18550,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:5530 */
+  /* ./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;
@@ -18559,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[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 = 5534;
+  fra.me.line = 5538;
   fra.me.meth = LOCATE_parser___ReduceAction125___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18577,71 +18674,76 @@ void parser___ReduceAction125___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5536 */
+  /* ./parser//parser.nit:5540 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5537 */
+  /* ./parser//parser.nit:5541 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5538 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5539 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5540 */
+  /* ./parser//parser.nit:5542 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5541 */
+  /* ./parser//parser.nit:5543 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5542 */
+  /* ./parser//parser.nit:5544 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5543 */
+  /* ./parser//parser.nit:5545 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5544 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:5546 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  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, 5546);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5549);
   }
-  /* ./parser//parser.nit:5548 */
-  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: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, 5551);
+  }
+  /* ./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, 5548);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5553);
   }
-  /* ./parser//parser.nit:5550 */
+  /* ./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, 5550);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5555);
   }
-  /* ./parser//parser.nit:5552 */
+  /* ./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, 5552);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5557);
   }
-  /* ./parser//parser.nit:5554 */
+  /* ./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, 5554);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5559);
   }
-  /* ./parser//parser.nit:5556 */
-  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: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, 5556);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5561);
   }
-  /* ./parser//parser.nit:5557 */
-  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:5569 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5570 */
+  /* ./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, 5570);
+    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);
@@ -18657,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 = 5573;
+  fra.me.line = 5578;
   fra.me.meth = LOCATE_parser___ReduceAction125___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18665,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:5573 */
+  /* ./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;
@@ -18674,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[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5577;
+  fra.me.line = 5582;
   fra.me.meth = LOCATE_parser___ReduceAction126___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18691,81 +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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5579 */
+  /* ./parser//parser.nit:5584 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5580 */
+  /* ./parser//parser.nit:5585 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5581 */
+  /* ./parser//parser.nit:5586 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5582 */
+  /* ./parser//parser.nit:5587 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5583 */
+  /* ./parser//parser.nit:5588 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5584 */
+  /* ./parser//parser.nit:5589 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5585 */
+  /* ./parser//parser.nit:5590 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5586 */
+  /* ./parser//parser.nit:5591 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5587 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5588 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5590 */
-  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, 5590);
-  }
-  /* ./parser//parser.nit:5592 */
-  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, 5592);
-  }
-  /* ./parser//parser.nit:5594 */
-  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: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, 5594);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5593);
   }
-  /* ./parser//parser.nit:5596 */
-  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: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, 5596);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5595);
   }
-  /* ./parser//parser.nit:5598 */
-  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: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, 5598);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5597);
   }
-  /* ./parser//parser.nit:5600 */
-  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: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, 5600);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5599);
   }
-  /* ./parser//parser.nit:5602 */
+  /* ./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, 5602);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5601);
   }
-  /* ./parser//parser.nit:5603 */
-  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:5615 */
+  /* ./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:5616 */
+  /* ./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, 5616);
+    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);
@@ -18781,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 = 5619;
+  fra.me.line = 5618;
   fra.me.meth = LOCATE_parser___ReduceAction126___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18789,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:5619 */
+  /* ./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;
@@ -18798,15 +18882,15 @@ void parser___ReduceAction126___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction127___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5623;
+  fra.me.line = 5622;
   fra.me.meth = LOCATE_parser___ReduceAction127___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18816,80 +18900,71 @@ void parser___ReduceAction127___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5625 */
+  /* ./parser//parser.nit:5624 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5626 */
+  /* ./parser//parser.nit:5625 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5626 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:5627 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:5628 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:5629 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5630 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5631 */
+  /* ./parser//parser.nit:5630 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5632 */
+  /* ./parser//parser.nit:5631 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5633 */
+  /* ./parser//parser.nit:5632 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:5634 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5634);
+  }
   /* ./parser//parser.nit:5636 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  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, 5636);
   }
   /* ./parser//parser.nit:5638 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  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, 5638);
   }
   /* ./parser//parser.nit:5640 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  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, 5640);
   }
   /* ./parser//parser.nit:5642 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  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, 5642);
   }
   /* ./parser//parser.nit:5644 */
-  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, 5644);
-  }
-  /* ./parser//parser.nit:5646 */
-  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, 5646);
-  }
-  /* ./parser//parser.nit:5648 */
   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, 5648);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5644);
   }
-  /* ./parser//parser.nit:5649 */
-  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:5661 */
+  /* ./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:5662 */
+  /* ./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, 5662);
+    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);
@@ -18905,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 = 5665;
+  fra.me.line = 5661;
   fra.me.meth = LOCATE_parser___ReduceAction127___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18913,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:5665 */
+  /* ./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;
@@ -18922,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[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5669;
+  fra.me.line = 5665;
   fra.me.meth = LOCATE_parser___ReduceAction128___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18940,89 +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[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5671 */
+  /* ./parser//parser.nit:5667 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5672 */
+  /* ./parser//parser.nit:5668 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5673 */
+  /* ./parser//parser.nit:5669 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5674 */
+  /* ./parser//parser.nit:5670 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5675 */
+  /* ./parser//parser.nit:5671 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5676 */
+  /* ./parser//parser.nit:5672 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5677 */
+  /* ./parser//parser.nit:5673 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5678 */
+  /* ./parser//parser.nit:5674 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5679 */
+  /* ./parser//parser.nit:5675 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5680 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5681 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5683 */
-  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, 5683);
-  }
-  /* ./parser//parser.nit:5685 */
-  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, 5685);
-  }
-  /* ./parser//parser.nit:5687 */
-  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: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, 5687);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5677);
   }
-  /* ./parser//parser.nit:5689 */
-  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: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, 5689);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5679);
   }
-  /* ./parser//parser.nit:5691 */
-  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: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, 5691);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5681);
   }
-  /* ./parser//parser.nit:5693 */
-  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: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, 5693);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5683);
   }
-  /* ./parser//parser.nit:5695 */
-  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: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, 5695);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5685);
   }
-  /* ./parser//parser.nit:5697 */
+  /* ./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, 5697);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5687);
   }
-  /* ./parser//parser.nit:5698 */
-  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:5710 */
+  /* ./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:5711 */
+  /* ./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, 5711);
+    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);
@@ -19038,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 = 5714;
+  fra.me.line = 5704;
   fra.me.meth = LOCATE_parser___ReduceAction128___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19046,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:5714 */
+  /* ./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;
@@ -19055,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[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 = 5718;
+  fra.me.line = 5708;
   fra.me.meth = LOCATE_parser___ReduceAction129___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19072,54 +19129,74 @@ void parser___ReduceAction129___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5720 */
+  /* ./parser//parser.nit:5710 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5721 */
+  /* ./parser//parser.nit:5711 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5722 */
+  /* ./parser//parser.nit:5712 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5723 */
+  /* ./parser//parser.nit:5713 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5724 */
+  /* ./parser//parser.nit:5714 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5715 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5725 */
+  /* ./parser//parser.nit:5716 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5726 */
+  /* ./parser//parser.nit:5717 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5728 */
-  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:5718 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 5728);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5721);
   }
-  /* ./parser//parser.nit:5730 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./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, 5730);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5723);
   }
-  /* ./parser//parser.nit:5732 */
-  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: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, 5732);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5725);
   }
-  /* ./parser//parser.nit:5734 */
-  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: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, 5727);
+  }
+  /* ./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, 5729);
+  }
+  /* ./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, 5734);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5731);
   }
-  /* ./parser//parser.nit:5736 */
+  /* ./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, 5736);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5733);
   }
-  /* ./parser//parser.nit:5737 */
-  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: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:5747 */
@@ -19188,58 +19265,60 @@ void parser___ReduceAction130___action(val_t p0, val_t p1){
   /* ./parser//parser.nit:5759 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:5760 */
-  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:5761 */
-  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:5762 */
-  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:5763 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5764 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5765 */
+  /* ./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, 5765);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5766);
   }
-  /* ./parser//parser.nit:5767 */
-  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: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, 5767);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5768);
   }
-  /* ./parser//parser.nit:5769 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* ./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, 5769);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5770);
   }
-  /* ./parser//parser.nit:5771 */
-  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: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, 5771);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5772);
   }
-  /* ./parser//parser.nit:5773 */
-  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: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, 5773);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5774);
   }
-  /* ./parser//parser.nit:5775 */
+  /* ./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, 5775);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5776);
   }
-  /* ./parser//parser.nit:5776 */
-  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:5785 */
+  /* ./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:5786 */
+  /* ./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, 5786);
+    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);
@@ -19255,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 = 5789;
+  fra.me.line = 5793;
   fra.me.meth = LOCATE_parser___ReduceAction130___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19263,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:5789 */
+  /* ./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;
@@ -19272,15 +19351,15 @@ void parser___ReduceAction130___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction131___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5793;
+  fra.me.line = 5797;
   fra.me.meth = LOCATE_parser___ReduceAction131___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19290,69 +19369,80 @@ void parser___ReduceAction131___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5795 */
+  /* ./parser//parser.nit:5799 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5796 */
+  /* ./parser//parser.nit:5800 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5797 */
+  /* ./parser//parser.nit:5801 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5798 */
+  /* ./parser//parser.nit:5802 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5799 */
+  /* ./parser//parser.nit:5803 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5804 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5800 */
+  /* ./parser//parser.nit:5805 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5801 */
+  /* ./parser//parser.nit:5806 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5802 */
+  /* ./parser//parser.nit:5807 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5804 */
-  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:5808 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 5804);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5810);
   }
-  /* ./parser//parser.nit:5806 */
-  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: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, 5806);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5812);
   }
-  /* ./parser//parser.nit:5808 */
-  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: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, 5808);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5814);
   }
-  /* ./parser//parser.nit:5810 */
-  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: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, 5810);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5816);
   }
-  /* ./parser//parser.nit:5812 */
-  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: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, 5812);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5818);
   }
-  /* ./parser//parser.nit:5814 */
+  /* ./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, 5820);
+  }
+  /* ./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, 5814);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5822);
   }
-  /* ./parser//parser.nit:5815 */
-  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:5824 */
+  /* ./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:5825 */
+  /* ./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, 5825);
+    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);
@@ -19368,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 = 5828;
+  fra.me.line = 5839;
   fra.me.meth = LOCATE_parser___ReduceAction131___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19376,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:5828 */
+  /* ./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;
@@ -19390,7 +19480,7 @@ void parser___ReduceAction132___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5832;
+  fra.me.line = 5843;
   fra.me.meth = LOCATE_parser___ReduceAction132___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -19406,75 +19496,77 @@ void parser___ReduceAction132___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5834 */
+  /* ./parser//parser.nit:5845 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5835 */
+  /* ./parser//parser.nit:5846 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5836 */
+  /* ./parser//parser.nit:5847 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5848 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5837 */
+  /* ./parser//parser.nit:5849 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5838 */
+  /* ./parser//parser.nit:5850 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5839 */
+  /* ./parser//parser.nit:5851 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5840 */
+  /* ./parser//parser.nit:5852 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5841 */
+  /* ./parser//parser.nit:5853 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5842 */
+  /* ./parser//parser.nit:5854 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5844 */
+  /* ./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, 5844);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5856);
   }
-  /* ./parser//parser.nit:5846 */
-  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: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, 5846);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5858);
   }
-  /* ./parser//parser.nit:5848 */
-  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: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, 5848);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5860);
   }
-  /* ./parser//parser.nit:5850 */
-  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: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, 5850);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5862);
   }
-  /* ./parser//parser.nit:5852 */
-  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: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, 5852);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5864);
   }
-  /* ./parser//parser.nit:5854 */
-  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: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, 5854);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5866);
   }
-  /* ./parser//parser.nit:5856 */
+  /* ./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, 5856);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5868);
   }
-  /* ./parser//parser.nit:5857 */
-  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:5866 */
+  /* ./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:5867 */
+  /* ./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, 5867);
+    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);
@@ -19490,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 = 5870;
+  fra.me.line = 5885;
   fra.me.meth = LOCATE_parser___ReduceAction132___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19498,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:5870 */
+  /* ./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;
@@ -19507,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 = 5874;
+  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;
@@ -19524,63 +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:5876 */
+  /* ./parser//parser.nit:5891 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5877 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5878 */
+  /* ./parser//parser.nit:5892 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5879 */
+  /* ./parser//parser.nit:5893 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5880 */
+  /* ./parser//parser.nit:5894 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5881 */
+  /* ./parser//parser.nit:5895 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5896 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5882 */
+  /* ./parser//parser.nit:5897 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5883 */
+  /* ./parser//parser.nit:5898 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5885 */
-  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, 5885);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5903);
   }
-  /* ./parser//parser.nit:5887 */
-  REGB0 = 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, 5887);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5905);
   }
-  /* ./parser//parser.nit:5889 */
-  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, 5889);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5907);
   }
-  /* ./parser//parser.nit:5891 */
-  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, 5891);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5909);
   }
-  /* ./parser//parser.nit:5893 */
+  /* ./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, 5913);
+  }
+  /* ./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, 5893);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5917);
   }
-  /* ./parser//parser.nit:5894 */
-  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:5903 */
+  /* ./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:5904 */
+  /* ./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, 5904);
+    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);
@@ -19596,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 = 5907;
+  fra.me.line = 5934;
   fra.me.meth = LOCATE_parser___ReduceAction133___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19604,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:5907 */
+  /* ./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;
@@ -19613,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 = 5911;
+  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;
@@ -19630,72 +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:5913 */
+  /* ./parser//parser.nit:5940 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5914 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5915 */
+  /* ./parser//parser.nit:5941 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5916 */
+  /* ./parser//parser.nit:5942 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5917 */
+  /* ./parser//parser.nit:5943 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5918 */
+  /* ./parser//parser.nit:5944 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5919 */
+  /* ./parser//parser.nit:5945 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5920 */
+  /* ./parser//parser.nit:5946 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5921 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5923 */
-  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, 5923);
-  }
-  /* ./parser//parser.nit:5925 */
-  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, 5925);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5948);
   }
-  /* ./parser//parser.nit:5927 */
+  /* ./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, 5927);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5950);
   }
-  /* ./parser//parser.nit:5929 */
+  /* ./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, 5929);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5952);
   }
-  /* ./parser//parser.nit:5931 */
+  /* ./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, 5931);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5954);
   }
-  /* ./parser//parser.nit:5933 */
+  /* ./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, 5933);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5956);
   }
-  /* ./parser//parser.nit:5934 */
-  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:5943 */
+  /* ./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:5944 */
+  /* ./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, 5944);
+    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);
@@ -19711,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 = 5947;
+  fra.me.line = 5970;
   fra.me.meth = LOCATE_parser___ReduceAction134___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19719,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:5947 */
+  /* ./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;
@@ -19733,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 = 5951;
+  fra.me.line = 5974;
   fra.me.meth = LOCATE_parser___ReduceAction135___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -19748,69 +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:5953 */
+  /* ./parser//parser.nit:5976 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5954 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5955 */
+  /* ./parser//parser.nit:5977 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5956 */
+  /* ./parser//parser.nit:5978 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5957 */
+  /* ./parser//parser.nit:5979 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5958 */
+  /* ./parser//parser.nit:5980 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5959 */
+  /* ./parser//parser.nit:5981 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5960 */
+  /* ./parser//parser.nit:5982 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5961 */
+  /* ./parser//parser.nit:5983 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5963 */
+  /* ./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, 5963);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5985);
   }
-  /* ./parser//parser.nit:5965 */
-  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, 5965);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5987);
   }
-  /* ./parser//parser.nit:5967 */
-  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, 5967);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5989);
   }
-  /* ./parser//parser.nit:5969 */
-  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, 5969);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5991);
   }
-  /* ./parser//parser.nit:5971 */
+  /* ./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, 5971);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5993);
   }
-  /* ./parser//parser.nit:5973 */
+  /* ./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, 5973);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5995);
   }
-  /* ./parser//parser.nit:5974 */
-  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:5983 */
+  /* ./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:5984 */
+  /* ./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, 5984);
+    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);
@@ -19826,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 = 5987;
+  fra.me.line = 6009;
   fra.me.meth = LOCATE_parser___ReduceAction135___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19834,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:5987 */
+  /* ./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;
@@ -19843,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 = 5991;
+  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;
@@ -19861,80 +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:5993 */
+  /* ./parser//parser.nit:6015 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5994 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5995 */
+  /* ./parser//parser.nit:6016 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5996 */
+  /* ./parser//parser.nit:6017 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5997 */
+  /* ./parser//parser.nit:6018 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5998 */
+  /* ./parser//parser.nit:6019 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5999 */
+  /* ./parser//parser.nit:6020 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6000 */
+  /* ./parser//parser.nit:6021 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6001 */
+  /* ./parser//parser.nit:6022 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6002 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6004 */
-  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, 6004);
-  }
-  /* ./parser//parser.nit:6006 */
-  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, 6006);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6024);
   }
-  /* ./parser//parser.nit:6008 */
+  /* ./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, 6008);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6026);
   }
-  /* ./parser//parser.nit:6010 */
+  /* ./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, 6010);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6028);
   }
-  /* ./parser//parser.nit:6012 */
+  /* ./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, 6012);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6030);
   }
-  /* ./parser//parser.nit:6014 */
+  /* ./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, 6014);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6032);
   }
-  /* ./parser//parser.nit:6016 */
+  /* ./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, 6016);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6034);
   }
-  /* ./parser//parser.nit:6017 */
-  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:6026 */
+  /* ./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:6027 */
+  /* ./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, 6027);
+    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);
@@ -19950,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 = 6030;
+  fra.me.line = 6048;
   fra.me.meth = LOCATE_parser___ReduceAction136___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19958,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:6030 */
+  /* ./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;
@@ -19967,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 = 6034;
+  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;
@@ -19984,59 +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:6036 */
+  /* ./parser//parser.nit:6054 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6037 */
+  /* ./parser//parser.nit:6055 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6038 */
+  /* ./parser//parser.nit:6056 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6057 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6039 */
+  /* ./parser//parser.nit:6058 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6040 */
+  /* ./parser//parser.nit:6059 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6041 */
+  /* ./parser//parser.nit:6060 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6043 */
-  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, 6043);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6064);
   }
-  /* ./parser//parser.nit:6045 */
-  REGB0 = 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, 6045);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6066);
   }
-  /* ./parser//parser.nit:6047 */
-  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: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, 6047);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6068);
   }
-  /* ./parser//parser.nit:6049 */
-  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: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, 6049);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6070);
   }
-  /* ./parser//parser.nit:6051 */
-  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: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, 6051);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6072);
   }
-  /* ./parser//parser.nit:6052 */
-  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:6060 */
+  /* ./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, 6074);
+  }
+  /* ./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, 6076);
+  }
+  /* ./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:6061 */
+  /* ./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, 6061);
+    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);
@@ -20052,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 = 6064;
+  fra.me.line = 6090;
   fra.me.meth = LOCATE_parser___ReduceAction137___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20060,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:6064 */
+  /* ./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;
@@ -20069,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 = 6068;
+  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;
@@ -20086,68 +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:6070 */
+  /* ./parser//parser.nit:6096 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6071 */
+  /* ./parser//parser.nit:6097 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6072 */
+  /* ./parser//parser.nit:6098 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6099 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6073 */
+  /* ./parser//parser.nit:6100 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6101 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6074 */
+  /* ./parser//parser.nit:6102 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6075 */
+  /* ./parser//parser.nit:6103 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6076 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6078 */
-  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, 6078);
-  }
-  /* ./parser//parser.nit:6080 */
-  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, 6080);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6105);
   }
-  /* ./parser//parser.nit:6082 */
+  /* ./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, 6082);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6107);
   }
-  /* ./parser//parser.nit:6084 */
-  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: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, 6084);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6109);
   }
-  /* ./parser//parser.nit:6086 */
-  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: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, 6086);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6111);
   }
-  /* ./parser//parser.nit:6088 */
-  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: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, 6088);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6113);
   }
-  /* ./parser//parser.nit:6089 */
-  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:6097 */
+  /* ./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:6098 */
+  /* ./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, 6098);
+    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);
@@ -20163,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 = 6101;
+  fra.me.line = 6127;
   fra.me.meth = LOCATE_parser___ReduceAction138___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20171,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:6101 */
+  /* ./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;
@@ -20180,40 +20290,89 @@ void parser___ReduceAction138___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction139___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 = 6105;
+  fra.me.line = 6131;
   fra.me.meth = LOCATE_parser___ReduceAction139___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:6107 */
+  /* ./parser//parser.nit:6133 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6108 */
+  /* ./parser//parser.nit:6134 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6110 */
-  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:6135 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6136 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6137 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6138 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6139 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6140 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6141 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 6110);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6143);
   }
-  /* ./parser//parser.nit:6111 */
-  fra.me.REG[3] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:6115 */
+  /* ./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, 6145);
+  }
+  /* ./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, 6147);
+  }
+  /* ./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, 6149);
+  }
+  /* ./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, 6151);
+  }
+  /* ./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, 6153);
+  }
+  /* ./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:6116 */
+  /* ./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, 6116);
+    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);
@@ -20229,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 = 6119;
+  fra.me.line = 6167;
   fra.me.meth = LOCATE_parser___ReduceAction139___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20237,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:6119 */
+  /* ./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;
@@ -20246,49 +20405,89 @@ 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[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6123;
+  fra.me.line = 6171;
   fra.me.meth = LOCATE_parser___ReduceAction140___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6125 */
+  /* ./parser//parser.nit:6173 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6126 */
+  /* ./parser//parser.nit:6174 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6127 */
+  /* ./parser//parser.nit:6175 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6176 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6129 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:6177 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6178 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6179 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6180 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6181 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 6129);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6183);
   }
-  /* ./parser//parser.nit:6131 */
-  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: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, 6131);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6185);
   }
-  /* ./parser//parser.nit:6132 */
-  fra.me.REG[3] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6136 */
+  /* ./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, 6187);
+  }
+  /* ./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, 6189);
+  }
+  /* ./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, 6191);
+  }
+  /* ./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, 6193);
+  }
+  /* ./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:6137 */
+  /* ./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, 6137);
+    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);
@@ -20304,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 = 6140;
+  fra.me.line = 6207;
   fra.me.meth = LOCATE_parser___ReduceAction140___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20312,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:6140 */
+  /* ./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;
@@ -20321,40 +20520,98 @@ 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[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6144;
+  fra.me.line = 6211;
   fra.me.meth = LOCATE_parser___ReduceAction141___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6146 */
+  /* ./parser//parser.nit:6213 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6147 */
+  /* ./parser//parser.nit:6214 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6149 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
+  /* ./parser//parser.nit:6215 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6216 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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:6219 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6220 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 6149);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6224);
   }
-  /* ./parser//parser.nit:6150 */
-  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:6155 */
+  /* ./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, 6226);
+  }
+  /* ./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, 6228);
+  }
+  /* ./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, 6230);
+  }
+  /* ./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, 6232);
+  }
+  /* ./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:6156 */
+  /* ./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, 6156);
+    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);
@@ -20370,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 = 6159;
+  fra.me.line = 6250;
   fra.me.meth = LOCATE_parser___ReduceAction141___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20378,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:6159 */
+  /* ./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;
@@ -20387,49 +20644,76 @@ 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[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6163;
+  fra.me.line = 6254;
   fra.me.meth = LOCATE_parser___ReduceAction142___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6165 */
+  /* ./parser//parser.nit:6256 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6166 */
+  /* ./parser//parser.nit:6257 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6167 */
+  /* ./parser//parser.nit:6258 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6169 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:6259 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6260 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6261 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 6169);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6263);
   }
-  /* ./parser//parser.nit:6171 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
+  /* ./parser//parser.nit: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, 6171);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6265);
   }
-  /* ./parser//parser.nit:6172 */
-  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:6177 */
+  /* ./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, 6267);
+  }
+  /* ./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, 6269);
+  }
+  /* ./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, 6271);
+  }
+  /* ./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:6178 */
+  /* ./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, 6178);
+    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);
@@ -20445,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 = 6181;
+  fra.me.line = 6284;
   fra.me.meth = LOCATE_parser___ReduceAction142___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20453,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:6181 */
+  /* ./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;
@@ -20462,49 +20746,85 @@ 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[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6185;
+  fra.me.line = 6288;
   fra.me.meth = LOCATE_parser___ReduceAction143___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6187 */
+  /* ./parser//parser.nit:6290 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6188 */
+  /* ./parser//parser.nit:6291 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6189 */
+  /* ./parser//parser.nit:6292 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6191 */
-  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: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, 6191);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6298);
   }
-  /* ./parser//parser.nit:6193 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
+  /* ./parser//parser.nit: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, 6193);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6300);
   }
-  /* ./parser//parser.nit:6194 */
-  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6199 */
+  /* ./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:6200 */
+  /* ./parser//parser.nit:6318 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction143____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6200);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6318);
   }
   REGB0 = ATTR_parser___ReduceAction143____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20520,7 +20840,7 @@ void parser___ReduceAction143___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos146]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6203;
+  fra.me.line = 6321;
   fra.me.meth = LOCATE_parser___ReduceAction143___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20528,7 +20848,7 @@ void parser___ReduceAction143___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6203 */
+  /* ./parser//parser.nit:6321 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction143____goto(fra.me.REG[1]) = REGB0;
@@ -20537,58 +20857,40 @@ 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[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 = 6207;
+  fra.me.line = 6325;
   fra.me.meth = LOCATE_parser___ReduceAction144___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:6209 */
+  /* ./parser//parser.nit:6327 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6210 */
+  /* ./parser//parser.nit:6328 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6211 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6212 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6214 */
-  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, 6214);
-  }
-  /* ./parser//parser.nit:6216 */
-  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, 6216);
-  }
-  /* ./parser//parser.nit:6218 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
+  /* ./parser//parser.nit: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, 6218);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6330);
   }
-  /* ./parser//parser.nit:6219 */
-  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:6224 */
+  /* ./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:6225 */
+  /* ./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, 6225);
+    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);
@@ -20604,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 = 6228;
+  fra.me.line = 6339;
   fra.me.meth = LOCATE_parser___ReduceAction144___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20612,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:6228 */
+  /* ./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;
@@ -20621,32 +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 = 6232;
+  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:6234 */
+  /* ./parser//parser.nit:6345 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6235 */
-  fra.me.REG[3] = NEW_APublicVisibility_parser_prod___APublicVisibility___init_apublicvisibility();
-  /* ./parser//parser.nit:6237 */
+  /* ./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_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_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:6238 */
+  /* ./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, 6238);
+    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);
@@ -20662,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 = 6241;
+  fra.me.line = 6360;
   fra.me.meth = LOCATE_parser___ReduceAction145___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20670,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:6241 */
+  /* ./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;
@@ -20684,7 +21003,7 @@ void parser___ReduceAction146___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 = 6245;
+  fra.me.line = 6364;
   fra.me.meth = LOCATE_parser___ReduceAction146___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20694,27 +21013,25 @@ void parser___ReduceAction146___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:6247 */
+  /* ./parser//parser.nit:6366 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6248 */
+  /* ./parser//parser.nit:6367 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6249 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6251 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwprivate, ID_TKwprivate)) /*cast nullable TKwprivate*/;
+  /* ./parser//parser.nit:6369 */
+  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, 6251);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6369);
   }
-  /* ./parser//parser.nit:6252 */
-  fra.me.REG[3] = NEW_APrivateVisibility_parser_prod___APrivateVisibility___init_aprivatevisibility(fra.me.REG[3]);
-  /* ./parser//parser.nit:6255 */
+  /* ./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:6256 */
+  /* ./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, 6256);
+    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);
@@ -20730,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 = 6259;
+  fra.me.line = 6379;
   fra.me.meth = LOCATE_parser___ReduceAction146___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20738,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:6259 */
+  /* ./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;
@@ -20747,42 +21064,49 @@ void parser___ReduceAction146___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction147___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6263;
+  fra.me.line = 6383;
   fra.me.meth = LOCATE_parser___ReduceAction147___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:6265 */
+  /* ./parser//parser.nit:6385 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6266 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6267 */
+  /* ./parser//parser.nit:6386 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6269 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwprotected, ID_TKwprotected)) /*cast nullable TKwprotected*/;
+  /* ./parser//parser.nit:6387 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 6269);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6389);
   }
-  /* ./parser//parser.nit:6270 */
-  fra.me.REG[3] = NEW_AProtectedVisibility_parser_prod___AProtectedVisibility___init_aprotectedvisibility(fra.me.REG[3]);
-  /* ./parser//parser.nit:6273 */
+  /* ./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, 6391);
+  }
+  /* ./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:6274 */
+  /* ./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, 6274);
+    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);
@@ -20798,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 = 6277;
+  fra.me.line = 6401;
   fra.me.meth = LOCATE_parser___ReduceAction147___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20806,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:6277 */
+  /* ./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;
@@ -20815,42 +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[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 = 6281;
+  fra.me.line = 6405;
   fra.me.meth = LOCATE_parser___ReduceAction148___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:6283 */
+  /* ./parser//parser.nit:6407 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6284 */
+  /* ./parser//parser.nit:6408 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6285 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6287 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwintrude, ID_TKwintrude)) /*cast nullable TKwintrude*/;
+  /* ./parser//parser.nit:6409 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 6287);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6411);
   }
-  /* ./parser//parser.nit:6288 */
-  fra.me.REG[3] = NEW_AIntrudeVisibility_parser_prod___AIntrudeVisibility___init_aintrudevisibility(fra.me.REG[3]);
-  /* ./parser//parser.nit:6291 */
+  /* ./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, 6413);
+  }
+  /* ./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:6292 */
+  /* ./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, 6292);
+    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);
@@ -20866,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 = 6295;
+  fra.me.line = 6423;
   fra.me.meth = LOCATE_parser___ReduceAction148___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20874,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:6295 */
+  /* ./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;
@@ -20883,40 +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 = 6299;
+  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:6301 */
+  /* ./parser//parser.nit:6429 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6302 */
+  /* ./parser//parser.nit:6430 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6304 */
-  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: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, 6304);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6434);
   }
-  /* ./parser//parser.nit:6305 */
-  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6308 */
+  /* ./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:6309 */
+  /* ./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, 6309);
+    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);
@@ -20932,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 = 6312;
+  fra.me.line = 6448;
   fra.me.meth = LOCATE_parser___ReduceAction149___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20940,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:6312 */
+  /* ./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;
@@ -20954,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 = 6316;
+  fra.me.line = 6452;
   fra.me.meth = LOCATE_parser___ReduceAction150___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20964,25 +21313,17 @@ 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:6318 */
+  /* ./parser//parser.nit:6454 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6319 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6321 */
-  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, 6321);
-  }
-  /* ./parser//parser.nit:6322 */
-  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6325 */
+  /* ./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:6326 */
+  /* ./parser//parser.nit:6458 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction150____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6326);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6458);
   }
   REGB0 = ATTR_parser___ReduceAction150____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20998,7 +21339,7 @@ void parser___ReduceAction150___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos153]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6329;
+  fra.me.line = 6461;
   fra.me.meth = LOCATE_parser___ReduceAction150___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21006,7 +21347,7 @@ void parser___ReduceAction150___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6329 */
+  /* ./parser//parser.nit:6461 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction150____goto(fra.me.REG[1]) = REGB0;
@@ -21020,7 +21361,7 @@ void parser___ReduceAction151___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 = 6333;
+  fra.me.line = 6465;
   fra.me.meth = LOCATE_parser___ReduceAction151___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21030,25 +21371,27 @@ void parser___ReduceAction151___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6335 */
+  /* ./parser//parser.nit:6467 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6336 */
+  /* ./parser//parser.nit:6468 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6338 */
-  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: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_TKwprivate, ID_TKwprivate)) /*cast nullable TKwprivate*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6338);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6471);
   }
-  /* ./parser//parser.nit:6339 */
-  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6342 */
+  /* ./parser//parser.nit:6472 */
+  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:6343 */
+  /* ./parser//parser.nit:6476 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction151____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6343);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6476);
   }
   REGB0 = ATTR_parser___ReduceAction151____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21064,7 +21407,7 @@ void parser___ReduceAction151___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos154]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6346;
+  fra.me.line = 6479;
   fra.me.meth = LOCATE_parser___ReduceAction151___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21072,7 +21415,7 @@ void parser___ReduceAction151___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6346 */
+  /* ./parser//parser.nit:6479 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction151____goto(fra.me.REG[1]) = REGB0;
@@ -21086,7 +21429,7 @@ void parser___ReduceAction152___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 = 6350;
+  fra.me.line = 6483;
   fra.me.meth = LOCATE_parser___ReduceAction152___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21096,25 +21439,27 @@ void parser___ReduceAction152___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6352 */
+  /* ./parser//parser.nit:6485 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6353 */
+  /* ./parser//parser.nit:6486 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6355 */
-  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: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_TKwprotected, ID_TKwprotected)) /*cast nullable TKwprotected*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6355);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6489);
   }
-  /* ./parser//parser.nit:6356 */
-  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6359 */
+  /* ./parser//parser.nit:6490 */
+  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:6360 */
+  /* ./parser//parser.nit:6494 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction152____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6360);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6494);
   }
   REGB0 = ATTR_parser___ReduceAction152____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21130,7 +21475,7 @@ void parser___ReduceAction152___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos155]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6363;
+  fra.me.line = 6497;
   fra.me.meth = LOCATE_parser___ReduceAction152___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21138,7 +21483,7 @@ void parser___ReduceAction152___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6363 */
+  /* ./parser//parser.nit:6497 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction152____goto(fra.me.REG[1]) = REGB0;
@@ -21152,7 +21497,7 @@ void parser___ReduceAction153___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 = 6367;
+  fra.me.line = 6501;
   fra.me.meth = LOCATE_parser___ReduceAction153___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21162,25 +21507,27 @@ void parser___ReduceAction153___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6369 */
+  /* ./parser//parser.nit:6503 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6370 */
+  /* ./parser//parser.nit:6504 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6372 */
-  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: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, 6372);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6507);
   }
-  /* ./parser//parser.nit:6373 */
-  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6376 */
+  /* ./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:6377 */
+  /* ./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, 6377);
+    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);
@@ -21196,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 = 6380;
+  fra.me.line = 6515;
   fra.me.meth = LOCATE_parser___ReduceAction153___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21204,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:6380 */
+  /* ./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;
@@ -21218,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 = 6384;
+  fra.me.line = 6519;
   fra.me.meth = LOCATE_parser___ReduceAction154___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21228,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:6386 */
+  /* ./parser//parser.nit:6521 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6387 */
+  /* ./parser//parser.nit:6522 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6389 */
-  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: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, 6389);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6524);
   }
-  /* ./parser//parser.nit:6390 */
-  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6393 */
+  /* ./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:6394 */
+  /* ./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, 6394);
+    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);
@@ -21262,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 = 6397;
+  fra.me.line = 6532;
   fra.me.meth = LOCATE_parser___ReduceAction154___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21270,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:6397 */
+  /* ./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;
@@ -21284,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 = 6401;
+  fra.me.line = 6536;
   fra.me.meth = LOCATE_parser___ReduceAction155___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21294,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:6403 */
+  /* ./parser//parser.nit:6538 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6404 */
+  /* ./parser//parser.nit:6539 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6406 */
-  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: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, 6406);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6541);
   }
-  /* ./parser//parser.nit:6407 */
-  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6410 */
+  /* ./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:6411 */
+  /* ./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, 6411);
+    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);
@@ -21328,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 = 6414;
+  fra.me.line = 6549;
   fra.me.meth = LOCATE_parser___ReduceAction155___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21336,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:6414 */
+  /* ./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;
@@ -21350,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 = 6418;
+  fra.me.line = 6553;
   fra.me.meth = LOCATE_parser___ReduceAction156___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21360,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:6420 */
+  /* ./parser//parser.nit:6555 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6421 */
+  /* ./parser//parser.nit:6556 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6423 */
-  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: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, 6423);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6558);
   }
-  /* ./parser//parser.nit:6424 */
-  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6427 */
+  /* ./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:6428 */
+  /* ./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, 6428);
+    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);
@@ -21394,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 = 6431;
+  fra.me.line = 6566;
   fra.me.meth = LOCATE_parser___ReduceAction156___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21402,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:6431 */
+  /* ./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;
@@ -21416,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 = 6435;
+  fra.me.line = 6570;
   fra.me.meth = LOCATE_parser___ReduceAction157___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21426,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:6437 */
+  /* ./parser//parser.nit:6572 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6438 */
+  /* ./parser//parser.nit:6573 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6440 */
-  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: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, 6440);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6575);
   }
-  /* ./parser//parser.nit:6441 */
-  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6444 */
+  /* ./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:6445 */
+  /* ./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, 6445);
+    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);
@@ -21460,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 = 6448;
+  fra.me.line = 6583;
   fra.me.meth = LOCATE_parser___ReduceAction157___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21468,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:6448 */
+  /* ./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;
@@ -21482,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 = 6452;
+  fra.me.line = 6587;
   fra.me.meth = LOCATE_parser___ReduceAction158___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21492,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:6454 */
+  /* ./parser//parser.nit:6589 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6455 */
+  /* ./parser//parser.nit:6590 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6457 */
-  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: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, 6457);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6592);
   }
-  /* ./parser//parser.nit:6458 */
-  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6461 */
+  /* ./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:6462 */
+  /* ./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, 6462);
+    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);
@@ -21526,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 = 6465;
+  fra.me.line = 6600;
   fra.me.meth = LOCATE_parser___ReduceAction158___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21534,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:6465 */
+  /* ./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;
@@ -21548,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 = 6469;
+  fra.me.line = 6604;
   fra.me.meth = LOCATE_parser___ReduceAction159___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21558,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:6471 */
+  /* ./parser//parser.nit:6606 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6472 */
+  /* ./parser//parser.nit:6607 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6474 */
-  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: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, 6474);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6609);
   }
-  /* ./parser//parser.nit:6475 */
-  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6478 */
+  /* ./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:6479 */
+  /* ./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, 6479);
+    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);
@@ -21592,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 = 6482;
+  fra.me.line = 6617;
   fra.me.meth = LOCATE_parser___ReduceAction159___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21600,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:6482 */
+  /* ./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;
@@ -21614,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 = 6486;
+  fra.me.line = 6621;
   fra.me.meth = LOCATE_parser___ReduceAction160___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21624,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:6488 */
+  /* ./parser//parser.nit:6623 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6489 */
+  /* ./parser//parser.nit:6624 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6491 */
-  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: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, 6491);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6626);
   }
-  /* ./parser//parser.nit:6492 */
-  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6495 */
+  /* ./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:6496 */
+  /* ./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, 6496);
+    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);
@@ -21658,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 = 6499;
+  fra.me.line = 6634;
   fra.me.meth = LOCATE_parser___ReduceAction160___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21666,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:6499 */
+  /* ./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;
@@ -21680,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 = 6503;
+  fra.me.line = 6638;
   fra.me.meth = LOCATE_parser___ReduceAction161___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21690,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:6505 */
+  /* ./parser//parser.nit:6640 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6506 */
+  /* ./parser//parser.nit:6641 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6508 */
-  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: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, 6508);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6643);
   }
-  /* ./parser//parser.nit:6509 */
-  fra.me.REG[3] = NEW_ALlMethid_parser_prod___ALlMethid___init_allmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6512 */
+  /* ./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:6513 */
+  /* ./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, 6513);
+    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);
@@ -21724,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 = 6516;
+  fra.me.line = 6651;
   fra.me.meth = LOCATE_parser___ReduceAction161___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21732,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:6516 */
+  /* ./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;
@@ -21746,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 = 6520;
+  fra.me.line = 6655;
   fra.me.meth = LOCATE_parser___ReduceAction162___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21756,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:6522 */
+  /* ./parser//parser.nit:6657 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6523 */
+  /* ./parser//parser.nit:6658 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6525 */
-  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: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, 6525);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6660);
   }
-  /* ./parser//parser.nit:6526 */
-  fra.me.REG[3] = NEW_AGgMethid_parser_prod___AGgMethid___init_aggmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6529 */
+  /* ./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:6530 */
+  /* ./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, 6530);
+    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);
@@ -21790,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 = 6533;
+  fra.me.line = 6668;
   fra.me.meth = LOCATE_parser___ReduceAction162___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21798,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:6533 */
+  /* ./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;
@@ -21807,49 +22154,40 @@ void parser___ReduceAction162___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction163___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 = 6537;
+  fra.me.line = 6672;
   fra.me.meth = LOCATE_parser___ReduceAction163___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:6539 */
+  /* ./parser//parser.nit:6674 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6540 */
+  /* ./parser//parser.nit:6675 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6541 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6543 */
-  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, 6543);
-  }
-  /* ./parser//parser.nit:6545 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
+  /* ./parser//parser.nit: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, 6545);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6677);
   }
-  /* ./parser//parser.nit:6546 */
-  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6550 */
+  /* ./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:6551 */
+  /* ./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, 6551);
+    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);
@@ -21865,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 = 6554;
+  fra.me.line = 6685;
   fra.me.meth = LOCATE_parser___ReduceAction163___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21873,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:6554 */
+  /* ./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;
@@ -21887,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 = 6558;
+  fra.me.line = 6689;
   fra.me.meth = LOCATE_parser___ReduceAction164___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21897,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:6560 */
+  /* ./parser//parser.nit:6691 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6561 */
+  /* ./parser//parser.nit:6692 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6563 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
+  /* ./parser//parser.nit: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, 6563);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6694);
   }
-  /* ./parser//parser.nit:6564 */
-  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6567 */
+  /* ./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:6568 */
+  /* ./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, 6568);
+    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);
@@ -21931,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 = 6571;
+  fra.me.line = 6702;
   fra.me.meth = LOCATE_parser___ReduceAction164___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21939,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:6571 */
+  /* ./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;
@@ -21948,49 +22286,40 @@ void parser___ReduceAction164___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction165___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 = 6575;
+  fra.me.line = 6706;
   fra.me.meth = LOCATE_parser___ReduceAction165___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:6577 */
+  /* ./parser//parser.nit:6708 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6578 */
+  /* ./parser//parser.nit:6709 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6579 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6581 */
-  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, 6581);
-  }
-  /* ./parser//parser.nit:6583 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  /* ./parser//parser.nit: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, 6583);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6711);
   }
-  /* ./parser//parser.nit:6584 */
-  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6588 */
+  /* ./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:6589 */
+  /* ./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, 6589);
+    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);
@@ -22006,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 = 6592;
+  fra.me.line = 6719;
   fra.me.meth = LOCATE_parser___ReduceAction165___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22014,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:6592 */
+  /* ./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;
@@ -22023,58 +22352,40 @@ void parser___ReduceAction165___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction166___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 = 6596;
+  fra.me.line = 6723;
   fra.me.meth = LOCATE_parser___ReduceAction166___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:6598 */
+  /* ./parser//parser.nit:6725 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6599 */
+  /* ./parser//parser.nit:6726 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6600 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6601 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6603 */
-  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, 6603);
-  }
-  /* ./parser//parser.nit:6605 */
-  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, 6605);
-  }
-  /* ./parser//parser.nit:6607 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  /* ./parser//parser.nit: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, 6607);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6728);
   }
-  /* ./parser//parser.nit:6608 */
-  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:6613 */
+  /* ./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:6614 */
+  /* ./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, 6614);
+    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);
@@ -22090,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 = 6617;
+  fra.me.line = 6736;
   fra.me.meth = LOCATE_parser___ReduceAction166___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22098,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:6617 */
+  /* ./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;
@@ -22107,58 +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[6];} 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 = 6621;
+  fra.me.line = 6740;
   fra.me.meth = LOCATE_parser___ReduceAction167___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6623 */
+  /* ./parser//parser.nit:6742 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6624 */
+  /* ./parser//parser.nit:6743 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6625 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6626 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6627 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6629 */
-  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, 6629);
-  }
-  /* ./parser//parser.nit:6631 */
-  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:6745 */
+  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, 6631);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6745);
   }
-  /* ./parser//parser.nit:6632 */
-  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:6633 */
-  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:6638 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6639 */
+  /* ./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: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, 6639);
+    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);
@@ -22174,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 = 6642;
+  fra.me.line = 6753;
   fra.me.meth = LOCATE_parser___ReduceAction167___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22182,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:6642 */
+  /* ./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;
@@ -22191,70 +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[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 = 6646;
+  fra.me.line = 6757;
   fra.me.meth = LOCATE_parser___ReduceAction168___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:6648 */
+  /* ./parser//parser.nit:6759 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6649 */
+  /* ./parser//parser.nit:6760 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6650 */
+  /* ./parser//parser.nit:6761 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6651 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6652 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6653 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6655 */
-  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, 6655);
-  }
-  /* ./parser//parser.nit:6656 */
-  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:6658 */
-  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: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, 6658);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6763);
   }
-  /* ./parser//parser.nit:6660 */
-  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:6765 */
+  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, 6660);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6765);
   }
-  /* ./parser//parser.nit:6661 */
-  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:6662 */
-  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:6667 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:6668 */
+  /* ./parser//parser.nit:6766 */
+  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, 6668);
+    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);
@@ -22270,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 = 6671;
+  fra.me.line = 6774;
   fra.me.meth = LOCATE_parser___ReduceAction168___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22278,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:6671 */
+  /* ./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;
@@ -22287,48 +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[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 = 6675;
+  fra.me.line = 6778;
   fra.me.meth = LOCATE_parser___ReduceAction169___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:6677 */
+  /* ./parser//parser.nit:6780 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6678 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6679 */
+  /* ./parser//parser.nit:6781 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6680 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6681 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6683 */
-  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:6783 */
+  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, 6683);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6783);
   }
-  /* ./parser//parser.nit:6684 */
-  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:6689 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6690 */
+  /* ./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: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, 6690);
+    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);
@@ -22344,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 = 6693;
+  fra.me.line = 6791;
   fra.me.meth = LOCATE_parser___ReduceAction169___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22352,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:6693 */
+  /* ./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;
@@ -22361,60 +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[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 = 6697;
+  fra.me.line = 6795;
   fra.me.meth = LOCATE_parser___ReduceAction170___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:6699 */
+  /* ./parser//parser.nit:6797 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6700 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6701 */
+  /* ./parser//parser.nit:6798 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6702 */
+  /* ./parser//parser.nit:6799 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6703 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6704 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6706 */
-  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: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, 6706);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6801);
   }
-  /* ./parser//parser.nit:6707 */
-  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:6709 */
-  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: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, 6709);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6803);
   }
-  /* ./parser//parser.nit:6710 */
-  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:6715 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6716 */
+  /* ./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: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, 6716);
+    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);
@@ -22430,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 = 6719;
+  fra.me.line = 6812;
   fra.me.meth = LOCATE_parser___ReduceAction170___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22438,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:6719 */
+  /* ./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;
@@ -22452,7 +22705,7 @@ void parser___ReduceAction171___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 = 6723;
+  fra.me.line = 6816;
   fra.me.meth = LOCATE_parser___ReduceAction171___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -22464,32 +22717,41 @@ void parser___ReduceAction171___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:6725 */
+  /* ./parser//parser.nit:6818 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6726 */
+  /* ./parser//parser.nit:6819 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6727 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6728 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6730 */
-  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:6820 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 6730);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6823);
   }
-  /* ./parser//parser.nit:6731 */
-  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:6732 */
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
-  /* ./parser//parser.nit:6737 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6738 */
+  /* ./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, 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 */
   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, 6738);
+    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);
@@ -22505,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 = 6741;
+  fra.me.line = 6837;
   fra.me.meth = LOCATE_parser___ReduceAction171___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22513,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:6741 */
+  /* ./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;
@@ -22527,7 +22789,7 @@ void parser___ReduceAction172___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 = 6745;
+  fra.me.line = 6841;
   fra.me.meth = LOCATE_parser___ReduceAction172___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -22540,43 +22802,40 @@ void parser___ReduceAction172___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:6747 */
+  /* ./parser//parser.nit:6843 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6748 */
+  /* ./parser//parser.nit:6844 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6749 */
+  /* ./parser//parser.nit:6845 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6750 */
+  /* ./parser//parser.nit:6846 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6751 */
+  /* ./parser//parser.nit:6847 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6753 */
-  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: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, 6753);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6849);
   }
-  /* ./parser//parser.nit:6754 */
-  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:6756 */
+  /* ./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, 6756);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6851);
   }
-  /* ./parser//parser.nit:6757 */
+  /* ./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:6758 */
-  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], NIT_NULL, fra.me.REG[6]);
-  /* ./parser//parser.nit:6763 */
+  /* ./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:6764 */
+  /* ./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, 6764);
+    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);
@@ -22592,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 = 6767;
+  fra.me.line = 6862;
   fra.me.meth = LOCATE_parser___ReduceAction172___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22600,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:6767 */
+  /* ./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;
@@ -22609,39 +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[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6771;
+  fra.me.line = 6866;
   fra.me.meth = LOCATE_parser___ReduceAction173___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6773 */
+  /* ./parser//parser.nit:6868 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6774 */
+  /* ./parser//parser.nit:6869 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6775 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6776 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6777 */
-  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
-  /* ./parser//parser.nit:6782 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:6783 */
+  /* ./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, 6875);
+  }
+  /* ./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, 6783);
+    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);
@@ -22657,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 = 6786;
+  fra.me.line = 6891;
   fra.me.meth = LOCATE_parser___ReduceAction173___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22665,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:6786 */
+  /* ./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;
@@ -22679,7 +22969,7 @@ void parser___ReduceAction174___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 = 6790;
+  fra.me.line = 6895;
   fra.me.meth = LOCATE_parser___ReduceAction174___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -22691,34 +22981,31 @@ void parser___ReduceAction174___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:6792 */
+  /* ./parser//parser.nit:6897 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6793 */
+  /* ./parser//parser.nit:6898 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6794 */
+  /* ./parser//parser.nit:6899 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6795 */
+  /* ./parser//parser.nit:6900 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6796 */
+  /* ./parser//parser.nit:6901 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6798 */
-  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: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, 6798);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6903);
   }
-  /* ./parser//parser.nit:6799 */
-  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:6800 */
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
-  /* ./parser//parser.nit:6805 */
+  /* ./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:6806 */
+  /* ./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, 6806);
+    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);
@@ -22734,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 = 6809;
+  fra.me.line = 6913;
   fra.me.meth = LOCATE_parser___ReduceAction174___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22742,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:6809 */
+  /* ./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;
@@ -22751,37 +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[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 = 6813;
+  fra.me.line = 6917;
   fra.me.meth = LOCATE_parser___ReduceAction175___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:6815 */
+  /* ./parser//parser.nit:6919 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6816 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6817 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6818 */
-  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
-  /* ./parser//parser.nit:6823 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:6824 */
+  /* ./parser//parser.nit:6920 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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: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, 6926);
+  }
+  /* ./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, 6824);
+    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);
@@ -22797,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 = 6827;
+  fra.me.line = 6939;
   fra.me.meth = LOCATE_parser___ReduceAction175___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22805,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:6827 */
+  /* ./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;
@@ -22819,7 +23129,7 @@ void parser___ReduceAction176___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 = 6831;
+  fra.me.line = 6943;
   fra.me.meth = LOCATE_parser___ReduceAction176___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -22831,32 +23141,32 @@ void parser___ReduceAction176___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:6833 */
+  /* ./parser//parser.nit:6945 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6834 */
+  /* ./parser//parser.nit:6946 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6835 */
+  /* ./parser//parser.nit:6947 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6836 */
+  /* ./parser//parser.nit:6948 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6838 */
+  /* ./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, 6838);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6950);
   }
-  /* ./parser//parser.nit:6839 */
-  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:6840 */
+  /* ./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:6845 */
+  /* ./parser//parser.nit:6957 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6846 */
+  /* ./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, 6846);
+    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);
@@ -22872,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 = 6849;
+  fra.me.line = 6961;
   fra.me.meth = LOCATE_parser___ReduceAction176___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22880,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:6849 */
+  /* ./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;
@@ -22889,46 +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[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 = 6853;
+  fra.me.line = 6965;
   fra.me.meth = LOCATE_parser___ReduceAction177___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:6855 */
+  /* ./parser//parser.nit:6967 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6856 */
+  /* ./parser//parser.nit:6968 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6857 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6858 */
+  /* ./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:6860 */
-  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: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, 6860);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6973);
   }
-  /* ./parser//parser.nit:6861 */
-  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:6866 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6867 */
+  /* ./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] = 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[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 */
   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, 6867);
+    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);
@@ -22944,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 = 6870;
+  fra.me.line = 6987;
   fra.me.meth = LOCATE_parser___ReduceAction177___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -22952,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:6870 */
+  /* ./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;
@@ -22961,58 +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[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 = 6874;
+  fra.me.line = 6991;
   fra.me.meth = LOCATE_parser___ReduceAction178___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:6876 */
+  /* ./parser//parser.nit:6993 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6877 */
+  /* ./parser//parser.nit:6994 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6878 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6879 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6880 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6882 */
-  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, 6882);
-  }
-  /* ./parser//parser.nit:6883 */
-  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:6885 */
-  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, 6885);
-  }
-  /* ./parser//parser.nit:6886 */
-  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:6891 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6892 */
+  /* ./parser//parser.nit:6995 */
+  fra.me.REG[3] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6996 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./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[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, 6892);
+    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);
@@ -23028,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 = 6895;
+  fra.me.line = 7006;
   fra.me.meth = LOCATE_parser___ReduceAction178___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23036,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:6895 */
+  /* ./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;
@@ -23045,62 +23351,51 @@ 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 REGB1;
   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 = 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:6901 */
+  /* ./parser//parser.nit:7012 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6902 */
+  /* ./parser//parser.nit:7013 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6903 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6904 */
+  /* ./parser//parser.nit:7014 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6905 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6906 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6907 */
+  /* ./parser//parser.nit:7015 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6909 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser.nit:7016 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7018 */
+  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:6910 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7018);
   }
-  /* ./parser//parser.nit:6912 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:6913 */
+  /* ./parser//parser.nit:7019 */
+  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[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[5];
+  /* ./parser//parser.nit:7026 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction179____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6913);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7026);
   }
   REGB0 = ATTR_parser___ReduceAction179____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23116,7 +23411,7 @@ void parser___ReduceAction179___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos182]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6916;
+  fra.me.line = 7029;
   fra.me.meth = LOCATE_parser___ReduceAction179___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23124,7 +23419,7 @@ void parser___ReduceAction179___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:6916 */
+  /* ./parser//parser.nit:7029 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   ATTR_parser___ReduceAction179____goto(fra.me.REG[1]) = REGB0;
@@ -23133,74 +23428,37 @@ 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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6920;
+  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:6922 */
+  /* ./parser//parser.nit:7035 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6923 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6924 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6925 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6926 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6927 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6928 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6929 */
-  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]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6932);
-  }
-  /* ./parser//parser.nit:6933 */
-  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:6934 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-  }
-  /* ./parser//parser.nit:6936 */
-  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:6937 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6938 */
+  /* ./parser//parser.nit:7036 */
+  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[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, 6938);
+    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);
@@ -23216,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 = 6941;
+  fra.me.line = 7047;
   fra.me.meth = LOCATE_parser___ReduceAction180___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23224,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:6941 */
+  /* ./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;
@@ -23233,38 +23491,49 @@ void parser___ReduceAction180___init(val_t p0, val_t p1, int* init_table){
   return;
 }
 void parser___ReduceAction181___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 = 6945;
+  fra.me.line = 7051;
   fra.me.meth = LOCATE_parser___ReduceAction181___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:6947 */
+  /* ./parser//parser.nit:7053 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6948 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6949 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6950 */
+  /* ./parser//parser.nit:7054 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6951 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6952 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6953 */
+  /* ./parser//parser.nit:7055 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7056 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./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, 7058);
+  }
+  /* ./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: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, 6953);
+    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);
@@ -23280,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 = 6956;
+  fra.me.line = 7069;
   fra.me.meth = LOCATE_parser___ReduceAction181___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23288,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:6956 */
+  /* ./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;
@@ -23297,37 +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[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 = 6960;
+  fra.me.line = 7073;
   fra.me.meth = LOCATE_parser___ReduceAction182___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:6962 */
+  /* ./parser//parser.nit:7075 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6963 */
+  /* ./parser//parser.nit:7076 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6964 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6965 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6967 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6968 */
+  /* ./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: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, 7080);
+  }
+  /* ./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, 6968);
+    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);
@@ -23343,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 = 6971;
+  fra.me.line = 7090;
   fra.me.meth = LOCATE_parser___ReduceAction182___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23351,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:6971 */
+  /* ./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;
@@ -23360,40 +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[3];} 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 = 6975;
+  fra.me.line = 7094;
   fra.me.meth = LOCATE_parser___ReduceAction183___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:6977 */
+  /* ./parser//parser.nit:7096 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6978 */
+  /* ./parser//parser.nit:7097 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6980 */
-  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:7098 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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 {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6980);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7102);
   }
-  /* ./parser//parser.nit:6981 */
-  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:6986 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6987 */
+  /* ./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)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7105);
+  }
+  /* ./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, 6987);
+    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);
@@ -23409,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 = 6990;
+  fra.me.line = 7115;
   fra.me.meth = LOCATE_parser___ReduceAction183___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23417,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:6990 */
+  /* ./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;
@@ -23428,10 +23724,11 @@ void parser___ReduceAction183___init(val_t p0, val_t p1, int* init_table){
 void parser___ReduceAction184___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6994;
+  fra.me.line = 7119;
   fra.me.meth = LOCATE_parser___ReduceAction184___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -23442,33 +23739,45 @@ void parser___ReduceAction184___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:6996 */
+  /* ./parser//parser.nit:7121 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6997 */
+  /* ./parser//parser.nit:7122 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7123 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7124 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6998 */
+  /* ./parser//parser.nit:7125 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7000 */
-  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: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 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7000);
+    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;
+    }
   }
-  /* ./parser//parser.nit:7002 */
-  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(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7002);
+    /* ./parser//parser.nit:7130 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7003 */
-  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7008 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7009 */
+  /* ./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, 7009);
+    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);
@@ -23484,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 = 7012;
+  fra.me.line = 7136;
   fra.me.meth = LOCATE_parser___ReduceAction184___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23492,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:7012 */
+  /* ./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;
@@ -23503,10 +23812,11 @@ void parser___ReduceAction184___init(val_t p0, val_t p1, int* init_table){
 void parser___ReduceAction185___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7016;
+  fra.me.line = 7140;
   fra.me.meth = LOCATE_parser___ReduceAction185___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -23518,41 +23828,56 @@ void parser___ReduceAction185___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:7018 */
+  /* ./parser//parser.nit:7142 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7019 */
+  /* ./parser//parser.nit:7143 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7020 */
+  /* ./parser//parser.nit:7144 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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:7021 */
+  /* ./parser//parser.nit:7147 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7023 */
-  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: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, 7023);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7152);
   }
-  /* ./parser//parser.nit:7025 */
-  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:7153 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7025);
+    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:7027 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TDotdotdot, ID_TDotdotdot)) /*cast nullable TDotdotdot*/;
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7027);
+    /* ./parser//parser.nit:7154 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:7028 */
-  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:7033 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7034 */
+  /* ./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, 7034);
+    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);
@@ -23568,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 = 7037;
+  fra.me.line = 7161;
   fra.me.meth = LOCATE_parser___ReduceAction185___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23576,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:7037 */
+  /* ./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;
@@ -23585,46 +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 = 7041;
+  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:7043 */
+  /* ./parser//parser.nit:7167 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7044 */
+  /* ./parser//parser.nit:7168 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7045 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7046 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7048 */
-  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, 7048);
-  }
-  /* ./parser//parser.nit:7049 */
-  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:7050 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7051 */
+  /* ./parser//parser.nit:7169 */
+  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, 7051);
+    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);
@@ -23640,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 = 7054;
+  fra.me.line = 7176;
   fra.me.meth = LOCATE_parser___ReduceAction186___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -23648,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:7054 */
+  /* ./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;
@@ -23657,14 +23974,218 @@ 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[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 = 7058;
+  fra.me.line = 7180;
   fra.me.meth = LOCATE_parser___ReduceAction187___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:7182 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7183 */
+  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: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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction187___init(val_t p0, val_t p1, int* init_table){
+  int itpos190 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction187].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos190]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7191;
+  fra.me.meth = LOCATE_parser___ReduceAction187___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos190] = 1;
+  return;
+}
+void parser___ReduceAction188___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 = 7195;
+  fra.me.meth = LOCATE_parser___ReduceAction188___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:7197 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7198 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7200 */
+  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, 7200);
+  }
+  /* ./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: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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction188___init(val_t p0, val_t p1, int* init_table){
+  int itpos191 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction188].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos191]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7210;
+  fra.me.meth = LOCATE_parser___ReduceAction188___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos191] = 1;
+  return;
+}
+void parser___ReduceAction189___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 = 7214;
+  fra.me.meth = LOCATE_parser___ReduceAction189___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:7216 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7217 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7218 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 7220);
+  }
+  /* ./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, 7222);
+  }
+  /* ./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: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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction189___init(val_t p0, val_t p1, int* init_table){
+  int itpos192 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction189].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos192]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7232;
+  fra.me.meth = LOCATE_parser___ReduceAction189___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos192] = 1;
+  return;
+}
+void parser___ReduceAction190___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7236;
+  fra.me.meth = LOCATE_parser___ReduceAction190___action;
+  fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -23674,653 +24195,1699 @@ void parser___ReduceAction187___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:7060 */
+  /* ./parser//parser.nit:7238 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7061 */
+  /* ./parser//parser.nit:7239 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7062 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7063 */
+  /* ./parser//parser.nit:7240 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7064 */
+  /* ./parser//parser.nit:7241 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7066 */
-  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: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, 7066);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7243);
   }
-  /* ./parser//parser.nit:7068 */
-  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: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, 7068);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7245);
   }
-  /* ./parser//parser.nit:7070 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* ./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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction190___init(val_t p0, val_t p1, int* init_table){
+  int itpos193 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction190].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos193]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7257;
+  fra.me.meth = LOCATE_parser___ReduceAction190___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos193] = 1;
+  return;
+}
+void parser___ReduceAction191___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 = 7261;
+  fra.me.meth = LOCATE_parser___ReduceAction191___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:7263 */
+  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[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7268 */
+  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 */
+  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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction191___init(val_t p0, val_t p1, int* init_table){
+  int itpos194 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction191].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos194]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7274;
+  fra.me.meth = LOCATE_parser___ReduceAction191___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos194] = 1;
+  return;
+}
+void parser___ReduceAction192___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7278;
+  fra.me.meth = LOCATE_parser___ReduceAction192___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:7280 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7281 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7282 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7283 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7284 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 7286);
+  }
+  /* ./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, 7288);
+  }
+  /* ./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, 7290);
+  }
+  /* ./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: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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction192___init(val_t p0, val_t p1, int* init_table){
+  int itpos195 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction192].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos195]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7302;
+  fra.me.meth = LOCATE_parser___ReduceAction192___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos195] = 1;
+  return;
+}
+void parser___ReduceAction193___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7306;
+  fra.me.meth = LOCATE_parser___ReduceAction193___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:7308 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7309 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7310 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7311 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7312 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7313 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 7315);
+  }
+  /* ./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, 7317);
+  }
+  /* ./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, 7319);
+  }
+  /* ./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, 7321);
+  }
+  /* ./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: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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction193___init(val_t p0, val_t p1, int* init_table){
+  int itpos196 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction193].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos196]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7333;
+  fra.me.meth = LOCATE_parser___ReduceAction193___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos196] = 1;
+  return;
+}
+void parser___ReduceAction194___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 = 7337;
+  fra.me.meth = LOCATE_parser___ReduceAction194___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:7339 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7340 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7341 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7342 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7343 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7344 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7345 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 7347);
+  }
+  /* ./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, 7349);
+  }
+  /* ./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, 7351);
+  }
+  /* ./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, 7353);
+  }
+  /* ./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: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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction194___init(val_t p0, val_t p1, int* init_table){
+  int itpos197 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction194].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos197]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7365;
+  fra.me.meth = LOCATE_parser___ReduceAction194___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos197] = 1;
+  return;
+}
+void parser___ReduceAction195___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7369;
+  fra.me.meth = LOCATE_parser___ReduceAction195___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:7371 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7372 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7373 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7374 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7375 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7376 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7377 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 7382);
+  }
+  /* ./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, 7384);
+  }
+  /* ./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, 7386);
+  }
+  /* ./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, 7388);
+  }
+  /* ./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: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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction195___init(val_t p0, val_t p1, int* init_table){
+  int itpos198 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction195].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos198]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7400;
+  fra.me.meth = LOCATE_parser___ReduceAction195___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos198] = 1;
+  return;
+}
+void parser___ReduceAction196___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 = 7404;
+  fra.me.meth = LOCATE_parser___ReduceAction196___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:7406 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7407 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7408 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7409 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7410 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7411 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7412 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7413 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 7415);
+  }
+  /* ./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, 7417);
+  }
+  /* ./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, 7419);
+  }
+  /* ./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, 7421);
+  }
+  /* ./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: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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction196___init(val_t p0, val_t p1, int* init_table){
+  int itpos199 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction196].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos199]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7433;
+  fra.me.meth = LOCATE_parser___ReduceAction196___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos199] = 1;
+  return;
+}
+void parser___ReduceAction197___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7437;
+  fra.me.meth = LOCATE_parser___ReduceAction197___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:7439 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./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: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, 7457);
+  }
+  /* ./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 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction197____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7466);
+  }
+  REGB0 = ATTR_parser___ReduceAction197____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction197___init(val_t p0, val_t p1, int* init_table){
+  int itpos200 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction197].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos200]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7469;
+  fra.me.meth = LOCATE_parser___ReduceAction197___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit:7469 */
+  fra.me.REG[1] = fra.me.REG[0];
+  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction197____goto(fra.me.REG[1]) = REGB0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos200] = 1;
+  return;
+}
+void parser___ReduceAction198___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  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 = 4;
+  fra.me.REG[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: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:7478 */
+  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, 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 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7484 */
+  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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction198___init(val_t p0, val_t p1, int* init_table){
+  int itpos201 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction198].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos201]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7487;
+  fra.me.meth = LOCATE_parser___ReduceAction198___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos201] = 1;
+  return;
+}
+void parser___ReduceAction199___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7491;
+  fra.me.meth = LOCATE_parser___ReduceAction199___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:7493 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7494 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7495 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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, 7499);
+  }
+  /* ./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, 7501);
+  }
+  /* ./parser//parser.nit:7502 */
+  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:7503 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+  }
+  /* ./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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction199___init(val_t p0, val_t p1, int* init_table){
+  int itpos202 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction199].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos202]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7513;
+  fra.me.meth = LOCATE_parser___ReduceAction199___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos202] = 1;
+  return;
+}
+void parser___ReduceAction200___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7517;
+  fra.me.meth = LOCATE_parser___ReduceAction200___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:7519 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7520 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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[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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction200___init(val_t p0, val_t p1, int* init_table){
+  int itpos203 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction200].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos203]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7543;
+  fra.me.meth = LOCATE_parser___ReduceAction200___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos203] = 1;
+  return;
+}
+void parser___ReduceAction201___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 = 7547;
+  fra.me.meth = LOCATE_parser___ReduceAction201___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:7549 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7550 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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: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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction201___init(val_t p0, val_t p1, int* init_table){
+  int itpos204 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction201].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos204]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7558;
+  fra.me.meth = LOCATE_parser___ReduceAction201___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos204] = 1;
+  return;
+}
+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 = 7562;
+  fra.me.meth = LOCATE_parser___ReduceAction202___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:7564 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7565 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7567 */
+  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, 7568);
+  }
+  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___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 = 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: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___ReduceAction202____goto(fra.me.REG[1]) = REGB0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos205] = 1;
+  return;
+}
+void parser___ReduceAction204___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7575;
+  fra.me.meth = LOCATE_parser___ReduceAction204___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: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: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, 7070);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7580);
   }
-  /* ./parser//parser.nit:7071 */
-  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:7078 */
+  /* ./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:7079 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction187____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7079);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7585);
   }
-  REGB0 = ATTR_parser___ReduceAction187____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction204____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction187___init(val_t p0, val_t p1, int* init_table){
-  int itpos190 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction187].i;
+void parser___ReduceAction204___init(val_t p0, val_t p1, int* init_table){
+  int itpos206 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction204].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos190]) return;
+  if (init_table[itpos206]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7082;
-  fra.me.meth = LOCATE_parser___ReduceAction187___init;
+  fra.me.line = 7588;
+  fra.me.meth = LOCATE_parser___ReduceAction204___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7082 */
+  /* ./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___ReduceAction187____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction204____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos190] = 1;
+  init_table[itpos206] = 1;
   return;
 }
-void parser___ReduceAction188___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction205___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7086;
-  fra.me.meth = LOCATE_parser___ReduceAction188___action;
+  fra.me.line = 7592;
+  fra.me.meth = LOCATE_parser___ReduceAction205___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7088 */
+  /* ./parser//parser.nit:7594 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7089 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7090 */
+  /* ./parser//parser.nit:7595 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7091 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7092 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7093 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7095 */
-  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, 7095);
-  }
-  /* ./parser//parser.nit:7097 */
-  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, 7097);
-  }
-  /* ./parser//parser.nit:7099 */
-  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, 7099);
-  }
-  /* ./parser//parser.nit:7101 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* ./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, 7101);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7597);
   }
-  /* ./parser//parser.nit:7102 */
-  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:7109 */
+  /* ./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:7110 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction188____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7110);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7602);
   }
-  REGB0 = ATTR_parser___ReduceAction188____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction205____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction188___init(val_t p0, val_t p1, int* init_table){
-  int itpos191 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction188].i;
+void parser___ReduceAction205___init(val_t p0, val_t p1, int* init_table){
+  int itpos207 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction205].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos191]) return;
+  if (init_table[itpos207]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7113;
-  fra.me.meth = LOCATE_parser___ReduceAction188___init;
+  fra.me.line = 7605;
+  fra.me.meth = LOCATE_parser___ReduceAction205___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7113 */
+  /* ./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___ReduceAction188____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction205____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos191] = 1;
+  init_table[itpos207] = 1;
   return;
 }
-void parser___ReduceAction189___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction206___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7117;
-  fra.me.meth = LOCATE_parser___ReduceAction189___action;
+  fra.me.line = 7609;
+  fra.me.meth = LOCATE_parser___ReduceAction206___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:7119 */
+  /* ./parser//parser.nit:7611 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7120 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7121 */
+  /* ./parser//parser.nit:7612 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7122 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7123 */
+  /* ./parser//parser.nit:7613 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7124 */
+  /* ./parser//parser.nit:7614 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7125 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7127 */
-  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, 7127);
-  }
-  /* ./parser//parser.nit:7129 */
-  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: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, 7129);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7616);
   }
-  /* ./parser//parser.nit:7131 */
-  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: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, 7131);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7618);
   }
-  /* ./parser//parser.nit:7133 */
-  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: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, 7133);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7620);
   }
-  /* ./parser//parser.nit:7134 */
-  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:7141 */
+  /* ./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:7142 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction189____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7142);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7627);
   }
-  REGB0 = ATTR_parser___ReduceAction189____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction206____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction189___init(val_t p0, val_t p1, int* init_table){
-  int itpos192 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction189].i;
+void parser___ReduceAction206___init(val_t p0, val_t p1, int* init_table){
+  int itpos208 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction206].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos192]) return;
+  if (init_table[itpos208]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7145;
-  fra.me.meth = LOCATE_parser___ReduceAction189___init;
+  fra.me.line = 7630;
+  fra.me.meth = LOCATE_parser___ReduceAction206___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7145 */
+  /* ./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___ReduceAction189____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction206____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos192] = 1;
+  init_table[itpos208] = 1;
   return;
 }
-void parser___ReduceAction190___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction207___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 = 7149;
-  fra.me.meth = LOCATE_parser___ReduceAction190___action;
+  fra.me.line = 7634;
+  fra.me.meth = LOCATE_parser___ReduceAction207___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7151 */
+  /* ./parser//parser.nit:7636 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7152 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7153 */
+  /* ./parser//parser.nit:7637 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7154 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7155 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7156 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7157 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7158 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7160 */
-  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, 7160);
-  }
-  /* ./parser//parser.nit:7162 */
-  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, 7162);
-  }
-  /* ./parser//parser.nit:7164 */
-  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, 7164);
-  }
-  /* ./parser//parser.nit:7166 */
-  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, 7166);
-  }
-  /* ./parser//parser.nit:7168 */
-  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:7639 */
+  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, 7168);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7639);
   }
-  /* ./parser//parser.nit:7169 */
-  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:7176 */
+  /* ./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:7177 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction190____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7177);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7644);
   }
-  REGB0 = ATTR_parser___ReduceAction190____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction207____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction190___init(val_t p0, val_t p1, int* init_table){
-  int itpos193 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction190].i;
+void parser___ReduceAction207___init(val_t p0, val_t p1, int* init_table){
+  int itpos209 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction207].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos193]) return;
+  if (init_table[itpos209]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7180;
-  fra.me.meth = LOCATE_parser___ReduceAction190___init;
+  fra.me.line = 7647;
+  fra.me.meth = LOCATE_parser___ReduceAction207___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7180 */
+  /* ./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___ReduceAction190____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction207____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos193] = 1;
+  init_table[itpos209] = 1;
   return;
 }
-void parser___ReduceAction191___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction208___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7184;
-  fra.me.meth = LOCATE_parser___ReduceAction191___action;
+  fra.me.line = 7651;
+  fra.me.meth = LOCATE_parser___ReduceAction208___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:7186 */
+  /* ./parser//parser.nit:7653 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7187 */
+  /* ./parser//parser.nit:7654 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7188 */
+  /* ./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:7189 */
+  /* ./parser//parser.nit:7657 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7190 */
+  /* ./parser//parser.nit:7658 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7191 */
+  /* ./parser//parser.nit:7659 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7192 */
+  /* ./parser//parser.nit:7660 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7661 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7193 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7195 */
-  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, 7195);
-  }
-  /* ./parser//parser.nit:7197 */
-  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: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, 7197);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7663);
   }
-  /* ./parser//parser.nit:7199 */
-  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: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, 7199);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7665);
   }
-  /* ./parser//parser.nit:7201 */
-  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: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, 7201);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7667);
   }
-  /* ./parser//parser.nit:7202 */
-  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:7209 */
+  /* ./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:7210 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction191____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7210);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7674);
   }
-  REGB0 = ATTR_parser___ReduceAction191____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction208____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction191___init(val_t p0, val_t p1, int* init_table){
-  int itpos194 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction191].i;
+void parser___ReduceAction208___init(val_t p0, val_t p1, int* init_table){
+  int itpos210 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction208].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos194]) return;
+  if (init_table[itpos210]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7213;
-  fra.me.meth = LOCATE_parser___ReduceAction191___init;
+  fra.me.line = 7677;
+  fra.me.meth = LOCATE_parser___ReduceAction208___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7213 */
+  /* ./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___ReduceAction191____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction208____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos194] = 1;
+  init_table[itpos210] = 1;
   return;
 }
-void parser___ReduceAction192___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction209___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7217;
-  fra.me.meth = LOCATE_parser___ReduceAction192___action;
+  fra.me.line = 7681;
+  fra.me.meth = LOCATE_parser___ReduceAction209___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:7219 */
+  /* ./parser//parser.nit:7683 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7220 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7221 */
+  /* ./parser//parser.nit:7684 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7222 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7223 */
+  /* ./parser//parser.nit:7685 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7224 */
+  /* ./parser//parser.nit:7686 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7225 */
+  /* ./parser//parser.nit:7687 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7226 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7227 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7229 */
-  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, 7229);
-  }
-  /* ./parser//parser.nit:7231 */
-  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, 7231);
-  }
-  /* ./parser//parser.nit:7233 */
-  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: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, 7233);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7689);
   }
-  /* ./parser//parser.nit:7235 */
-  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: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, 7235);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7691);
   }
-  /* ./parser//parser.nit:7237 */
-  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: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, 7237);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7693);
   }
-  /* ./parser//parser.nit:7238 */
-  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:7245 */
+  /* ./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:7246 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction192____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7246);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7700);
   }
-  REGB0 = ATTR_parser___ReduceAction192____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction209____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction192___init(val_t p0, val_t p1, int* init_table){
-  int itpos195 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction192].i;
+void parser___ReduceAction209___init(val_t p0, val_t p1, int* init_table){
+  int itpos211 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction209].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos195]) return;
+  if (init_table[itpos211]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7249;
-  fra.me.meth = LOCATE_parser___ReduceAction192___init;
+  fra.me.line = 7703;
+  fra.me.meth = LOCATE_parser___ReduceAction209___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7249 */
+  /* ./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___ReduceAction192____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction209____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos195] = 1;
+  init_table[itpos211] = 1;
   return;
 }
-void parser___ReduceAction193___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction210___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7253;
-  fra.me.meth = LOCATE_parser___ReduceAction193___action;
+  fra.me.line = 7707;
+  fra.me.meth = LOCATE_parser___ReduceAction210___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:7255 */
+  /* ./parser//parser.nit:7709 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7256 */
+  /* ./parser//parser.nit:7710 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7258 */
-  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: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, 7258);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7717);
   }
-  /* ./parser//parser.nit:7259 */
-  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:7263 */
+  /* ./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:7264 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction193____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7264);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7731);
   }
-  REGB0 = ATTR_parser___ReduceAction193____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction210____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction193___init(val_t p0, val_t p1, int* init_table){
-  int itpos196 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction193].i;
+void parser___ReduceAction210___init(val_t p0, val_t p1, int* init_table){
+  int itpos212 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction210].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos196]) return;
+  if (init_table[itpos212]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7267;
-  fra.me.meth = LOCATE_parser___ReduceAction193___init;
+  fra.me.line = 7734;
+  fra.me.meth = LOCATE_parser___ReduceAction210___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7267 */
+  /* ./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___ReduceAction193____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction210____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos196] = 1;
+  init_table[itpos212] = 1;
   return;
 }
-void parser___ReduceAction194___action(val_t p0, val_t p1){
+void parser___ReduceAction211___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7271;
-  fra.me.meth = LOCATE_parser___ReduceAction194___action;
+  fra.me.line = 7738;
+  fra.me.meth = LOCATE_parser___ReduceAction211___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -24330,66 +25897,66 @@ void parser___ReduceAction194___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7273 */
+  /* ./parser//parser.nit:7740 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7274 */
+  /* ./parser//parser.nit:7741 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7275 */
+  /* ./parser//parser.nit:7742 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7277 */
+  /* ./parser//parser.nit:7744 */
   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, 7277);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7744);
   }
-  /* ./parser//parser.nit:7278 */
+  /* ./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:7283 */
+  /* ./parser//parser.nit:7750 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7284 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction194____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7284);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7751);
   }
-  REGB0 = ATTR_parser___ReduceAction194____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction211____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction194___init(val_t p0, val_t p1, int* init_table){
-  int itpos197 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction194].i;
+void parser___ReduceAction211___init(val_t p0, val_t p1, int* init_table){
+  int itpos213 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction211].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos197]) return;
+  if (init_table[itpos213]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7287;
-  fra.me.meth = LOCATE_parser___ReduceAction194___init;
+  fra.me.line = 7754;
+  fra.me.meth = LOCATE_parser___ReduceAction211___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7287 */
+  /* ./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___ReduceAction194____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction211____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos197] = 1;
+  init_table[itpos213] = 1;
   return;
 }
-void parser___ReduceAction195___action(val_t p0, val_t p1){
+void parser___ReduceAction212___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7291;
-  fra.me.meth = LOCATE_parser___ReduceAction195___action;
+  fra.me.line = 7758;
+  fra.me.meth = LOCATE_parser___ReduceAction212___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -24400,74 +25967,74 @@ void parser___ReduceAction195___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7293 */
+  /* ./parser//parser.nit:7760 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7294 */
+  /* ./parser//parser.nit:7761 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7295 */
+  /* ./parser//parser.nit:7762 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7296 */
+  /* ./parser//parser.nit:7763 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7298 */
+  /* ./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, 7298);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7765);
   }
-  /* ./parser//parser.nit:7300 */
+  /* ./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, 7300);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7767);
   }
-  /* ./parser//parser.nit:7301 */
+  /* ./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:7306 */
+  /* ./parser//parser.nit:7773 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7307 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction195____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7307);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7774);
   }
-  REGB0 = ATTR_parser___ReduceAction195____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction212____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction195___init(val_t p0, val_t p1, int* init_table){
-  int itpos198 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction195].i;
+void parser___ReduceAction212___init(val_t p0, val_t p1, int* init_table){
+  int itpos214 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction212].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos198]) return;
+  if (init_table[itpos214]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7310;
-  fra.me.meth = LOCATE_parser___ReduceAction195___init;
+  fra.me.line = 7777;
+  fra.me.meth = LOCATE_parser___ReduceAction212___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7310 */
+  /* ./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___ReduceAction195____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction212____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos198] = 1;
+  init_table[itpos214] = 1;
   return;
 }
-void parser___ReduceAction196___action(val_t p0, val_t p1){
+void parser___ReduceAction213___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7314;
-  fra.me.meth = LOCATE_parser___ReduceAction196___action;
+  fra.me.line = 7781;
+  fra.me.meth = LOCATE_parser___ReduceAction213___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -24478,85 +26045,85 @@ void parser___ReduceAction196___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7316 */
+  /* ./parser//parser.nit:7783 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7317 */
+  /* ./parser//parser.nit:7784 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7318 */
+  /* ./parser//parser.nit:7785 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7319 */
+  /* ./parser//parser.nit:7786 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7320 */
+  /* ./parser//parser.nit:7787 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7321 */
+  /* ./parser//parser.nit:7788 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7322 */
+  /* ./parser//parser.nit:7789 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7323 */
+  /* ./parser//parser.nit:7790 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7325 */
+  /* ./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, 7325);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7792);
   }
-  /* ./parser//parser.nit:7327 */
+  /* ./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, 7327);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7794);
   }
-  /* ./parser//parser.nit:7328 */
+  /* ./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:7329 */
+  /* ./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:7334 */
+  /* ./parser//parser.nit:7801 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7335 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction196____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7335);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7802);
   }
-  REGB0 = ATTR_parser___ReduceAction196____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction213____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction196___init(val_t p0, val_t p1, int* init_table){
-  int itpos199 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction196].i;
+void parser___ReduceAction213___init(val_t p0, val_t p1, int* init_table){
+  int itpos215 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction213].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos199]) return;
+  if (init_table[itpos215]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7338;
-  fra.me.meth = LOCATE_parser___ReduceAction196___init;
+  fra.me.line = 7805;
+  fra.me.meth = LOCATE_parser___ReduceAction213___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7338 */
+  /* ./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___ReduceAction196____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction213____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos199] = 1;
+  init_table[itpos215] = 1;
   return;
 }
-void parser___ReduceAction197___action(val_t p0, val_t p1){
+void parser___ReduceAction214___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7342;
-  fra.me.meth = LOCATE_parser___ReduceAction197___action;
+  fra.me.line = 7809;
+  fra.me.meth = LOCATE_parser___ReduceAction214___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -24568,94 +26135,94 @@ void parser___ReduceAction197___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7344 */
+  /* ./parser//parser.nit:7811 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7345 */
+  /* ./parser//parser.nit:7812 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7346 */
+  /* ./parser//parser.nit:7813 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7347 */
+  /* ./parser//parser.nit:7814 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7348 */
+  /* ./parser//parser.nit:7815 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7349 */
+  /* ./parser//parser.nit:7816 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7350 */
+  /* ./parser//parser.nit:7817 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7351 */
+  /* ./parser//parser.nit:7818 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7352 */
+  /* ./parser//parser.nit:7819 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7354 */
+  /* ./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 {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7354);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7821);
   }
-  /* ./parser//parser.nit:7356 */
+  /* ./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)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7356);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7823);
   }
-  /* ./parser//parser.nit:7358 */
+  /* ./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, 7358);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7825);
   }
-  /* ./parser//parser.nit:7359 */
+  /* ./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:7360 */
+  /* ./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:7365 */
+  /* ./parser//parser.nit:7832 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:7366 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction197____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7366);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7833);
   }
-  REGB0 = ATTR_parser___ReduceAction197____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction214____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction197___init(val_t p0, val_t p1, int* init_table){
-  int itpos200 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction197].i;
+void parser___ReduceAction214___init(val_t p0, val_t p1, int* init_table){
+  int itpos216 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction214].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos200]) return;
+  if (init_table[itpos216]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7369;
-  fra.me.meth = LOCATE_parser___ReduceAction197___init;
+  fra.me.line = 7836;
+  fra.me.meth = LOCATE_parser___ReduceAction214___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7369 */
+  /* ./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___ReduceAction197____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction214____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos200] = 1;
+  init_table[itpos216] = 1;
   return;
 }
-void parser___ReduceAction198___action(val_t p0, val_t p1){
+void parser___ReduceAction215___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7373;
-  fra.me.meth = LOCATE_parser___ReduceAction198___action;
+  fra.me.line = 7840;
+  fra.me.meth = LOCATE_parser___ReduceAction215___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -24665,13 +26232,13 @@ void parser___ReduceAction198___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7375 */
+  /* ./parser//parser.nit:7842 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7376 */
+  /* ./parser//parser.nit:7843 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7377 */
+  /* ./parser//parser.nit:7844 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7379 */
+  /* ./parser//parser.nit:7846 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -24686,56 +26253,56 @@ void parser___ReduceAction198___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7380 */
+    /* ./parser//parser.nit:7847 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7382 */
+  /* ./parser//parser.nit:7849 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7383 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction198____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7383);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7850);
   }
-  REGB0 = ATTR_parser___ReduceAction198____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction215____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction198___init(val_t p0, val_t p1, int* init_table){
-  int itpos201 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction198].i;
+void parser___ReduceAction215___init(val_t p0, val_t p1, int* init_table){
+  int itpos217 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction215].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos201]) return;
+  if (init_table[itpos217]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7386;
-  fra.me.meth = LOCATE_parser___ReduceAction198___init;
+  fra.me.line = 7853;
+  fra.me.meth = LOCATE_parser___ReduceAction215___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7386 */
+  /* ./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___ReduceAction198____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction215____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos201] = 1;
+  init_table[itpos217] = 1;
   return;
 }
-void parser___ReduceAction199___action(val_t p0, val_t p1){
+void parser___ReduceAction216___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7390;
-  fra.me.meth = LOCATE_parser___ReduceAction199___action;
+  fra.me.line = 7857;
+  fra.me.meth = LOCATE_parser___ReduceAction216___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -24746,21 +26313,21 @@ void parser___ReduceAction199___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7392 */
+  /* ./parser//parser.nit:7859 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7393 */
+  /* ./parser//parser.nit:7860 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7394 */
+  /* ./parser//parser.nit:7861 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7395 */
+  /* ./parser//parser.nit:7862 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7398 */
+  /* ./parser//parser.nit:7865 */
   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, 7398);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7865);
   }
-  /* ./parser//parser.nit:7399 */
+  /* ./parser//parser.nit:7866 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -24775,58 +26342,58 @@ void parser___ReduceAction199___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7400 */
+    /* ./parser//parser.nit:7867 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:7402 */
+  /* ./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:7403 */
+  /* ./parser//parser.nit:7870 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7404 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction199____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7404);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7871);
   }
-  REGB0 = ATTR_parser___ReduceAction199____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction216____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction199___init(val_t p0, val_t p1, int* init_table){
-  int itpos202 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction199].i;
+void parser___ReduceAction216___init(val_t p0, val_t p1, int* init_table){
+  int itpos218 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction216].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos202]) return;
+  if (init_table[itpos218]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7407;
-  fra.me.meth = LOCATE_parser___ReduceAction199___init;
+  fra.me.line = 7874;
+  fra.me.meth = LOCATE_parser___ReduceAction216___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7407 */
+  /* ./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___ReduceAction199____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction216____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos202] = 1;
+  init_table[itpos218] = 1;
   return;
 }
-void parser___ReduceAction200___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 = 7411;
-  fra.me.meth = LOCATE_parser___ReduceAction200___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;
@@ -24836,60 +26403,60 @@ void parser___ReduceAction200___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7413 */
+  /* ./parser//parser.nit:7880 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7414 */
+  /* ./parser//parser.nit:7881 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7415 */
+  /* ./parser//parser.nit:7882 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7416 */
+  /* ./parser//parser.nit:7883 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7418 */
+  /* ./parser//parser.nit:7885 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7419 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction200____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7419);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7886);
   }
-  REGB0 = ATTR_parser___ReduceAction200____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___ReduceAction200___init(val_t p0, val_t p1, int* init_table){
-  int itpos203 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction200].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[itpos203]) return;
+  if (init_table[itpos219]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7422;
-  fra.me.meth = LOCATE_parser___ReduceAction200___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:7422 */
+  /* ./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___ReduceAction200____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction217____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos203] = 1;
+  init_table[itpos219] = 1;
   return;
 }
-void parser___ReduceAction202___action(val_t p0, val_t p1){
+void parser___ReduceAction219___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7426;
-  fra.me.meth = LOCATE_parser___ReduceAction202___action;
+  fra.me.line = 7893;
+  fra.me.meth = LOCATE_parser___ReduceAction219___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -24899,60 +26466,60 @@ void parser___ReduceAction202___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7428 */
+  /* ./parser//parser.nit:7895 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7429 */
+  /* ./parser//parser.nit:7896 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7430 */
+  /* ./parser//parser.nit:7897 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7431 */
+  /* ./parser//parser.nit:7898 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7433 */
+  /* ./parser//parser.nit:7900 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7434 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction202____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7434);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7901);
   }
-  REGB0 = ATTR_parser___ReduceAction202____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction219____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction202___init(val_t p0, val_t p1, int* init_table){
-  int itpos204 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction202].i;
+void parser___ReduceAction219___init(val_t p0, val_t p1, int* init_table){
+  int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction219].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos204]) return;
+  if (init_table[itpos220]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7437;
-  fra.me.meth = LOCATE_parser___ReduceAction202___init;
+  fra.me.line = 7904;
+  fra.me.meth = LOCATE_parser___ReduceAction219___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7437 */
+  /* ./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___ReduceAction202____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction219____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos204] = 1;
+  init_table[itpos220] = 1;
   return;
 }
-void parser___ReduceAction203___action(val_t p0, val_t p1){
+void parser___ReduceAction220___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7441;
-  fra.me.meth = LOCATE_parser___ReduceAction203___action;
+  fra.me.line = 7908;
+  fra.me.meth = LOCATE_parser___ReduceAction220___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -24961,62 +26528,62 @@ 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:7443 */
+  /* ./parser//parser.nit:7910 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7444 */
+  /* ./parser//parser.nit:7911 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7445 */
+  /* ./parser//parser.nit:7912 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7446 */
+  /* ./parser//parser.nit:7913 */
   fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7447 */
+  /* ./parser//parser.nit:7914 */
   fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:7450 */
+  /* ./parser//parser.nit:7917 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7451 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction203____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7451);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7918);
   }
-  REGB0 = ATTR_parser___ReduceAction203____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction220____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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___ReduceAction220___init(val_t p0, val_t p1, int* init_table){
+  int itpos221 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction220].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos205]) return;
+  if (init_table[itpos221]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7454;
-  fra.me.meth = LOCATE_parser___ReduceAction203___init;
+  fra.me.line = 7921;
+  fra.me.meth = LOCATE_parser___ReduceAction220___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7454 */
+  /* ./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___ReduceAction203____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction220____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos205] = 1;
+  init_table[itpos221] = 1;
   return;
 }
-void parser___ReduceAction204___action(val_t p0, val_t p1){
+void parser___ReduceAction221___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7458;
-  fra.me.meth = LOCATE_parser___ReduceAction204___action;
+  fra.me.line = 7925;
+  fra.me.meth = LOCATE_parser___ReduceAction221___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -25025,60 +26592,60 @@ 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:7460 */
+  /* ./parser//parser.nit:7927 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7461 */
+  /* ./parser//parser.nit:7928 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7462 */
+  /* ./parser//parser.nit:7929 */
   fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7463 */
+  /* ./parser//parser.nit:7930 */
   fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:7466 */
+  /* ./parser//parser.nit:7933 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7467 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction204____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7467);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7934);
   }
-  REGB0 = ATTR_parser___ReduceAction204____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction221____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction204___init(val_t p0, val_t p1, int* init_table){
-  int itpos206 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction204].i;
+void parser___ReduceAction221___init(val_t p0, val_t p1, int* init_table){
+  int itpos222 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction221].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos206]) return;
+  if (init_table[itpos222]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7470;
-  fra.me.meth = LOCATE_parser___ReduceAction204___init;
+  fra.me.line = 7937;
+  fra.me.meth = LOCATE_parser___ReduceAction221___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7470 */
+  /* ./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___ReduceAction204____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction221____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos206] = 1;
+  init_table[itpos222] = 1;
   return;
 }
-void parser___ReduceAction205___action(val_t p0, val_t p1){
+void parser___ReduceAction222___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7474;
-  fra.me.meth = LOCATE_parser___ReduceAction205___action;
+  fra.me.line = 7941;
+  fra.me.meth = LOCATE_parser___ReduceAction222___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -25087,57 +26654,57 @@ void parser___ReduceAction205___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7476 */
+  /* ./parser//parser.nit:7943 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7477 */
+  /* ./parser//parser.nit:7944 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7479 */
+  /* ./parser//parser.nit:7946 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7480 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction205____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7480);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7947);
   }
-  REGB0 = ATTR_parser___ReduceAction205____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction222____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction205___init(val_t p0, val_t p1, int* init_table){
-  int itpos207 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction205].i;
+void parser___ReduceAction222___init(val_t p0, val_t p1, int* init_table){
+  int itpos223 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction222].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos207]) return;
+  if (init_table[itpos223]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7483;
-  fra.me.meth = LOCATE_parser___ReduceAction205___init;
+  fra.me.line = 7950;
+  fra.me.meth = LOCATE_parser___ReduceAction222___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7483 */
+  /* ./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___ReduceAction205____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction222____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos207] = 1;
+  init_table[itpos223] = 1;
   return;
 }
-void parser___ReduceAction206___action(val_t p0, val_t p1){
+void parser___ReduceAction223___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7487;
-  fra.me.meth = LOCATE_parser___ReduceAction206___action;
+  fra.me.line = 7954;
+  fra.me.meth = LOCATE_parser___ReduceAction223___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -25147,19 +26714,19 @@ void parser___ReduceAction206___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7489 */
+  /* ./parser//parser.nit:7956 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7490 */
+  /* ./parser//parser.nit:7957 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7491 */
+  /* ./parser//parser.nit:7958 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7493 */
+  /* ./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, 7493);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7960);
   }
-  /* ./parser//parser.nit:7494 */
+  /* ./parser//parser.nit:7961 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -25174,58 +26741,58 @@ void parser___ReduceAction206___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7495 */
+    /* ./parser//parser.nit:7962 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7497 */
+  /* ./parser//parser.nit:7964 */
   fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  /* ./parser//parser.nit:7500 */
+  /* ./parser//parser.nit:7967 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7501 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction206____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7501);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7968);
   }
-  REGB0 = ATTR_parser___ReduceAction206____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction223____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction206___init(val_t p0, val_t p1, int* init_table){
-  int itpos208 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction206].i;
+void parser___ReduceAction223___init(val_t p0, val_t p1, int* init_table){
+  int itpos224 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction223].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos208]) return;
+  if (init_table[itpos224]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7504;
-  fra.me.meth = LOCATE_parser___ReduceAction206___init;
+  fra.me.line = 7971;
+  fra.me.meth = LOCATE_parser___ReduceAction223___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7504 */
+  /* ./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___ReduceAction206____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction223____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos208] = 1;
+  init_table[itpos224] = 1;
   return;
 }
-void parser___ReduceAction207___action(val_t p0, val_t p1){
+void parser___ReduceAction224___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7508;
-  fra.me.meth = LOCATE_parser___ReduceAction207___action;
+  fra.me.line = 7975;
+  fra.me.meth = LOCATE_parser___ReduceAction224___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -25236,27 +26803,27 @@ void parser___ReduceAction207___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7510 */
+  /* ./parser//parser.nit:7977 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7511 */
+  /* ./parser//parser.nit:7978 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7512 */
+  /* ./parser//parser.nit:7979 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7513 */
+  /* ./parser//parser.nit:7980 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7515 */
+  /* ./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, 7515);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7982);
   }
-  /* ./parser//parser.nit:7517 */
+  /* ./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 {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7517);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7984);
   }
-  /* ./parser//parser.nit:7518 */
+  /* ./parser//parser.nit:7985 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -25271,61 +26838,61 @@ void parser___ReduceAction207___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7519 */
+    /* ./parser//parser.nit:7986 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:7521 */
+  /* ./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:7522 */
+  /* ./parser//parser.nit:7989 */
   fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  /* ./parser//parser.nit:7525 */
+  /* ./parser//parser.nit:7992 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7526 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction207____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:7993 */
+  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, 7526);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7993);
   }
-  REGB0 = ATTR_parser___ReduceAction207____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction224____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction207___init(val_t p0, val_t p1, int* init_table){
-  int itpos209 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction207].i;
+void parser___ReduceAction224___init(val_t p0, val_t p1, int* init_table){
+  int itpos225 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction224].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos209]) return;
+  if (init_table[itpos225]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7529;
-  fra.me.meth = LOCATE_parser___ReduceAction207___init;
+  fra.me.line = 7996;
+  fra.me.meth = LOCATE_parser___ReduceAction224___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7529 */
+  /* ./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___ReduceAction207____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction224____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos209] = 1;
+  init_table[itpos225] = 1;
   return;
 }
-void parser___ReduceAction208___action(val_t p0, val_t p1){
+void parser___ReduceAction225___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7533;
-  fra.me.meth = LOCATE_parser___ReduceAction208___action;
+  fra.me.line = 8000;
+  fra.me.meth = LOCATE_parser___ReduceAction225___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -25335,21 +26902,21 @@ void parser___ReduceAction208___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7535 */
+  /* ./parser//parser.nit:8002 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7536 */
+  /* ./parser//parser.nit:8003 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7537 */
+  /* ./parser//parser.nit:8004 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7538 */
+  /* ./parser//parser.nit:8005 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7540 */
+  /* ./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, 7540);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8007);
   }
-  /* ./parser//parser.nit:7541 */
+  /* ./parser//parser.nit:8008 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -25364,58 +26931,58 @@ void parser___ReduceAction208___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7542 */
+    /* ./parser//parser.nit:8009 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7544 */
+  /* ./parser//parser.nit:8011 */
   fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  /* ./parser//parser.nit:7547 */
+  /* ./parser//parser.nit:8014 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7548 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction208____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7548);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8015);
   }
-  REGB0 = ATTR_parser___ReduceAction208____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction225____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction208___init(val_t p0, val_t p1, int* init_table){
-  int itpos210 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction208].i;
+void parser___ReduceAction225___init(val_t p0, val_t p1, int* init_table){
+  int itpos226 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction225].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos210]) return;
+  if (init_table[itpos226]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7551;
-  fra.me.meth = LOCATE_parser___ReduceAction208___init;
+  fra.me.line = 8018;
+  fra.me.meth = LOCATE_parser___ReduceAction225___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7551 */
+  /* ./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___ReduceAction208____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction225____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos210] = 1;
+  init_table[itpos226] = 1;
   return;
 }
-void parser___ReduceAction209___action(val_t p0, val_t p1){
+void parser___ReduceAction226___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7555;
-  fra.me.meth = LOCATE_parser___ReduceAction209___action;
+  fra.me.line = 8022;
+  fra.me.meth = LOCATE_parser___ReduceAction226___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -25426,29 +26993,29 @@ void parser___ReduceAction209___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7557 */
+  /* ./parser//parser.nit:8024 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7558 */
+  /* ./parser//parser.nit:8025 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7559 */
+  /* ./parser//parser.nit:8026 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7560 */
+  /* ./parser//parser.nit:8027 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7561 */
+  /* ./parser//parser.nit:8028 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7563 */
+  /* ./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, 7563);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8030);
   }
-  /* ./parser//parser.nit:7565 */
+  /* ./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, 7565);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8032);
   }
-  /* ./parser//parser.nit:7566 */
+  /* ./parser//parser.nit:8033 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -25463,60 +27030,60 @@ void parser___ReduceAction209___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7567 */
+    /* ./parser//parser.nit:8034 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:7569 */
+  /* ./parser//parser.nit:8036 */
   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:7570 */
+  /* ./parser//parser.nit:8037 */
   fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  /* ./parser//parser.nit:7573 */
+  /* ./parser//parser.nit:8040 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7574 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction209____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7574);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8041);
   }
-  REGB0 = ATTR_parser___ReduceAction209____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction226____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction209___init(val_t p0, val_t p1, int* init_table){
-  int itpos211 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction209].i;
+void parser___ReduceAction226___init(val_t p0, val_t p1, int* init_table){
+  int itpos227 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction226].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos211]) return;
+  if (init_table[itpos227]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7577;
-  fra.me.meth = LOCATE_parser___ReduceAction209___init;
+  fra.me.line = 8044;
+  fra.me.meth = LOCATE_parser___ReduceAction226___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7577 */
+  /* ./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___ReduceAction209____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction226____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos211] = 1;
+  init_table[itpos227] = 1;
   return;
 }
-void parser___ReduceAction210___action(val_t p0, val_t p1){
+void parser___ReduceAction227___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7581;
-  fra.me.meth = LOCATE_parser___ReduceAction210___action;
+  fra.me.line = 8048;
+  fra.me.meth = LOCATE_parser___ReduceAction227___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -25526,58 +27093,58 @@ void parser___ReduceAction210___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7583 */
+  /* ./parser//parser.nit:8050 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7584 */
+  /* ./parser//parser.nit:8051 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7585 */
+  /* ./parser//parser.nit:8052 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7587 */
+  /* ./parser//parser.nit:8054 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7588 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction210____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:8055 */
+  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, 7588);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8055);
   }
-  REGB0 = ATTR_parser___ReduceAction210____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___ReduceAction210___init(val_t p0, val_t p1, int* init_table){
-  int itpos212 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction210].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;
-  if (init_table[itpos212]) return;
+  if (init_table[itpos228]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7591;
-  fra.me.meth = LOCATE_parser___ReduceAction210___init;
+  fra.me.line = 8058;
+  fra.me.meth = LOCATE_parser___ReduceAction227___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7591 */
+  /* ./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___ReduceAction210____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction227____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos212] = 1;
+  init_table[itpos228] = 1;
   return;
 }
-void parser___ReduceAction213___action(val_t p0, val_t p1){
+void parser___ReduceAction230___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7595;
-  fra.me.meth = LOCATE_parser___ReduceAction213___action;
+  fra.me.line = 8062;
+  fra.me.meth = LOCATE_parser___ReduceAction230___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -25586,64 +27153,64 @@ void parser___ReduceAction213___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7597 */
+  /* ./parser//parser.nit:8064 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7598 */
+  /* ./parser//parser.nit:8065 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7600 */
+  /* ./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, 7600);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8067);
   }
-  /* ./parser//parser.nit:7601 */
+  /* ./parser//parser.nit:8068 */
   fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7605 */
+  /* ./parser//parser.nit:8072 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7606 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction213____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7606);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8073);
   }
-  REGB0 = ATTR_parser___ReduceAction213____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction230____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction213___init(val_t p0, val_t p1, int* init_table){
-  int itpos213 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction213].i;
+void parser___ReduceAction230___init(val_t p0, val_t p1, int* init_table){
+  int itpos229 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction230].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos213]) return;
+  if (init_table[itpos229]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7609;
-  fra.me.meth = LOCATE_parser___ReduceAction213___init;
+  fra.me.line = 8076;
+  fra.me.meth = LOCATE_parser___ReduceAction230___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7609 */
+  /* ./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___ReduceAction213____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction230____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos213] = 1;
+  init_table[itpos229] = 1;
   return;
 }
-void parser___ReduceAction214___action(val_t p0, val_t p1){
+void parser___ReduceAction231___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7613;
-  fra.me.meth = LOCATE_parser___ReduceAction214___action;
+  fra.me.line = 8080;
+  fra.me.meth = LOCATE_parser___ReduceAction231___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -25653,72 +27220,72 @@ void parser___ReduceAction214___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7615 */
+  /* ./parser//parser.nit:8082 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7616 */
+  /* ./parser//parser.nit:8083 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7617 */
+  /* ./parser//parser.nit:8084 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7619 */
+  /* ./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, 7619);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8086);
   }
-  /* ./parser//parser.nit:7621 */
+  /* ./parser//parser.nit:8088 */
   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, 7621);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8088);
   }
-  /* ./parser//parser.nit:7622 */
+  /* ./parser//parser.nit:8089 */
   fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7626 */
+  /* ./parser//parser.nit:8093 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7627 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction214____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7627);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8094);
   }
-  REGB0 = ATTR_parser___ReduceAction214____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction231____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction214___init(val_t p0, val_t p1, int* init_table){
-  int itpos214 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction214].i;
+void parser___ReduceAction231___init(val_t p0, val_t p1, int* init_table){
+  int itpos230 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction231].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos214]) return;
+  if (init_table[itpos230]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7630;
-  fra.me.meth = LOCATE_parser___ReduceAction214___init;
+  fra.me.line = 8097;
+  fra.me.meth = LOCATE_parser___ReduceAction231___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7630 */
+  /* ./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___ReduceAction214____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction231____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos214] = 1;
+  init_table[itpos230] = 1;
   return;
 }
-void parser___ReduceAction215___action(val_t p0, val_t p1){
+void parser___ReduceAction232___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7634;
-  fra.me.meth = LOCATE_parser___ReduceAction215___action;
+  fra.me.line = 8101;
+  fra.me.meth = LOCATE_parser___ReduceAction232___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -25727,64 +27294,64 @@ void parser___ReduceAction215___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7636 */
+  /* ./parser//parser.nit:8103 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7637 */
+  /* ./parser//parser.nit:8104 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7639 */
+  /* ./parser//parser.nit:8106 */
   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, 7639);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8106);
   }
-  /* ./parser//parser.nit:7640 */
+  /* ./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:7645 */
+  /* ./parser//parser.nit:8112 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7646 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction215____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7646);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8113);
   }
-  REGB0 = ATTR_parser___ReduceAction215____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction232____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction215___init(val_t p0, val_t p1, int* init_table){
-  int itpos215 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction215].i;
+void parser___ReduceAction232___init(val_t p0, val_t p1, int* init_table){
+  int itpos231 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction232].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos215]) return;
+  if (init_table[itpos231]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7649;
-  fra.me.meth = LOCATE_parser___ReduceAction215___init;
+  fra.me.line = 8116;
+  fra.me.meth = LOCATE_parser___ReduceAction232___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7649 */
+  /* ./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___ReduceAction215____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction232____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos215] = 1;
+  init_table[itpos231] = 1;
   return;
 }
-void parser___ReduceAction216___action(val_t p0, val_t p1){
+void parser___ReduceAction233___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7653;
-  fra.me.meth = LOCATE_parser___ReduceAction216___action;
+  fra.me.line = 8120;
+  fra.me.meth = LOCATE_parser___ReduceAction233___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -25794,72 +27361,72 @@ void parser___ReduceAction216___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7655 */
+  /* ./parser//parser.nit:8122 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7656 */
+  /* ./parser//parser.nit:8123 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7657 */
+  /* ./parser//parser.nit:8124 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7659 */
+  /* ./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, 7659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8126);
   }
-  /* ./parser//parser.nit:7661 */
+  /* ./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, 7661);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8128);
   }
-  /* ./parser//parser.nit:7662 */
+  /* ./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:7667 */
+  /* ./parser//parser.nit:8134 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7668 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction216____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7668);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8135);
   }
-  REGB0 = ATTR_parser___ReduceAction216____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction233____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction216___init(val_t p0, val_t p1, int* init_table){
-  int itpos216 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction216].i;
+void parser___ReduceAction233___init(val_t p0, val_t p1, int* init_table){
+  int itpos232 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction233].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos216]) return;
+  if (init_table[itpos232]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7671;
-  fra.me.meth = LOCATE_parser___ReduceAction216___init;
+  fra.me.line = 8138;
+  fra.me.meth = LOCATE_parser___ReduceAction233___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7671 */
+  /* ./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___ReduceAction216____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction233____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos216] = 1;
+  init_table[itpos232] = 1;
   return;
 }
-void parser___ReduceAction217___action(val_t p0, val_t p1){
+void parser___ReduceAction234___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7675;
-  fra.me.meth = LOCATE_parser___ReduceAction217___action;
+  fra.me.line = 8142;
+  fra.me.meth = LOCATE_parser___ReduceAction234___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -25869,72 +27436,72 @@ void parser___ReduceAction217___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7677 */
+  /* ./parser//parser.nit:8144 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7678 */
+  /* ./parser//parser.nit:8145 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7679 */
+  /* ./parser//parser.nit:8146 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7681 */
+  /* ./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, 7681);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8148);
   }
-  /* ./parser//parser.nit:7683 */
+  /* ./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, 7683);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8150);
   }
-  /* ./parser//parser.nit:7684 */
+  /* ./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:7689 */
+  /* ./parser//parser.nit:8156 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7690 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction217____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7690);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8157);
   }
-  REGB0 = ATTR_parser___ReduceAction217____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction234____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction217___init(val_t p0, val_t p1, int* init_table){
-  int itpos217 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction217].i;
+void parser___ReduceAction234___init(val_t p0, val_t p1, int* init_table){
+  int itpos233 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction234].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos217]) return;
+  if (init_table[itpos233]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7693;
-  fra.me.meth = LOCATE_parser___ReduceAction217___init;
+  fra.me.line = 8160;
+  fra.me.meth = LOCATE_parser___ReduceAction234___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7693 */
+  /* ./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___ReduceAction217____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction234____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos217] = 1;
+  init_table[itpos233] = 1;
   return;
 }
-void parser___ReduceAction218___action(val_t p0, val_t p1){
+void parser___ReduceAction235___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7697;
-  fra.me.meth = LOCATE_parser___ReduceAction218___action;
+  fra.me.line = 8164;
+  fra.me.meth = LOCATE_parser___ReduceAction235___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -25945,80 +27512,80 @@ void parser___ReduceAction218___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7699 */
+  /* ./parser//parser.nit:8166 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7700 */
+  /* ./parser//parser.nit:8167 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7701 */
+  /* ./parser//parser.nit:8168 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7702 */
+  /* ./parser//parser.nit:8169 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7704 */
+  /* ./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, 7704);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8171);
   }
-  /* ./parser//parser.nit:7706 */
+  /* ./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, 7706);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8173);
   }
-  /* ./parser//parser.nit:7708 */
+  /* ./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, 7708);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8175);
   }
-  /* ./parser//parser.nit:7709 */
+  /* ./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:7714 */
+  /* ./parser//parser.nit:8181 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7715 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction218____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7715);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8182);
   }
-  REGB0 = ATTR_parser___ReduceAction218____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction235____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos218 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction218].i;
+void parser___ReduceAction235___init(val_t p0, val_t p1, int* init_table){
+  int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction235].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos218]) return;
+  if (init_table[itpos234]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7718;
-  fra.me.meth = LOCATE_parser___ReduceAction218___init;
+  fra.me.line = 8185;
+  fra.me.meth = LOCATE_parser___ReduceAction235___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7718 */
+  /* ./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___ReduceAction218____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction235____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos218] = 1;
+  init_table[itpos234] = 1;
   return;
 }
-void parser___ReduceAction219___action(val_t p0, val_t p1){
+void parser___ReduceAction236___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7722;
-  fra.me.meth = LOCATE_parser___ReduceAction219___action;
+  fra.me.line = 8189;
+  fra.me.meth = LOCATE_parser___ReduceAction236___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -26027,64 +27594,64 @@ void parser___ReduceAction219___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7724 */
+  /* ./parser//parser.nit:8191 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7725 */
+  /* ./parser//parser.nit:8192 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7727 */
+  /* ./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, 7727);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8194);
   }
-  /* ./parser//parser.nit:7728 */
+  /* ./parser//parser.nit:8195 */
   fra.me.REG[3] = NEW_AAbortExpr_parser_prod___AAbortExpr___init_aabortexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:7731 */
+  /* ./parser//parser.nit:8198 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7732 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction219____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7732);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8199);
   }
-  REGB0 = ATTR_parser___ReduceAction219____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction236____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction219___init(val_t p0, val_t p1, int* init_table){
-  int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction219].i;
+void parser___ReduceAction236___init(val_t p0, val_t p1, int* init_table){
+  int itpos235 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction236].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos219]) return;
+  if (init_table[itpos235]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7735;
-  fra.me.meth = LOCATE_parser___ReduceAction219___init;
+  fra.me.line = 8202;
+  fra.me.meth = LOCATE_parser___ReduceAction236___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7735 */
+  /* ./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___ReduceAction219____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction236____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos219] = 1;
+  init_table[itpos235] = 1;
   return;
 }
-void parser___ReduceAction220___action(val_t p0, val_t p1){
+void parser___ReduceAction237___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7739;
-  fra.me.meth = LOCATE_parser___ReduceAction220___action;
+  fra.me.line = 8206;
+  fra.me.meth = LOCATE_parser___ReduceAction237___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -26093,64 +27660,64 @@ 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:7741 */
+  /* ./parser//parser.nit:8208 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7742 */
+  /* ./parser//parser.nit:8209 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7744 */
+  /* ./parser//parser.nit:8211 */
   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, 7744);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8211);
   }
-  /* ./parser//parser.nit:7745 */
+  /* ./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:7750 */
+  /* ./parser//parser.nit:8217 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7751 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction220____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7751);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8218);
   }
-  REGB0 = ATTR_parser___ReduceAction220____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction237____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction220___init(val_t p0, val_t p1, int* init_table){
-  int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction220].i;
+void parser___ReduceAction237___init(val_t p0, val_t p1, int* init_table){
+  int itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction237].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos220]) return;
+  if (init_table[itpos236]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7754;
-  fra.me.meth = LOCATE_parser___ReduceAction220___init;
+  fra.me.line = 8221;
+  fra.me.meth = LOCATE_parser___ReduceAction237___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7754 */
+  /* ./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___ReduceAction220____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction237____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos220] = 1;
+  init_table[itpos236] = 1;
   return;
 }
-void parser___ReduceAction221___action(val_t p0, val_t p1){
+void parser___ReduceAction238___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7758;
-  fra.me.meth = LOCATE_parser___ReduceAction221___action;
+  fra.me.line = 8225;
+  fra.me.meth = LOCATE_parser___ReduceAction238___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26160,72 +27727,72 @@ void parser___ReduceAction221___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7760 */
+  /* ./parser//parser.nit:8227 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7761 */
+  /* ./parser//parser.nit:8228 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7762 */
+  /* ./parser//parser.nit:8229 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7764 */
+  /* ./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, 7764);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8231);
   }
-  /* ./parser//parser.nit:7766 */
+  /* ./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, 7766);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8233);
   }
-  /* ./parser//parser.nit:7767 */
+  /* ./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:7772 */
+  /* ./parser//parser.nit:8239 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7773 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction221____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7773);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8240);
   }
-  REGB0 = ATTR_parser___ReduceAction221____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction238____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction221___init(val_t p0, val_t p1, int* init_table){
-  int itpos221 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction221].i;
+void parser___ReduceAction238___init(val_t p0, val_t p1, int* init_table){
+  int itpos237 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction238].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos221]) return;
+  if (init_table[itpos237]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7776;
-  fra.me.meth = LOCATE_parser___ReduceAction221___init;
+  fra.me.line = 8243;
+  fra.me.meth = LOCATE_parser___ReduceAction238___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7776 */
+  /* ./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___ReduceAction221____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction238____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos221] = 1;
+  init_table[itpos237] = 1;
   return;
 }
-void parser___ReduceAction222___action(val_t p0, val_t p1){
+void parser___ReduceAction239___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7780;
-  fra.me.meth = LOCATE_parser___ReduceAction222___action;
+  fra.me.line = 8247;
+  fra.me.meth = LOCATE_parser___ReduceAction239___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26235,72 +27802,72 @@ void parser___ReduceAction222___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7782 */
+  /* ./parser//parser.nit:8249 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7783 */
+  /* ./parser//parser.nit:8250 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7784 */
+  /* ./parser//parser.nit:8251 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7786 */
+  /* ./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, 7786);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8253);
   }
-  /* ./parser//parser.nit:7788 */
+  /* ./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, 7788);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8255);
   }
-  /* ./parser//parser.nit:7789 */
+  /* ./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:7794 */
+  /* ./parser//parser.nit:8261 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7795 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction222____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7795);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8262);
   }
-  REGB0 = ATTR_parser___ReduceAction222____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction239____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction222___init(val_t p0, val_t p1, int* init_table){
-  int itpos222 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction222].i;
+void parser___ReduceAction239___init(val_t p0, val_t p1, int* init_table){
+  int itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction239].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos222]) return;
+  if (init_table[itpos238]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7798;
-  fra.me.meth = LOCATE_parser___ReduceAction222___init;
+  fra.me.line = 8265;
+  fra.me.meth = LOCATE_parser___ReduceAction239___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7798 */
+  /* ./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___ReduceAction222____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction239____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos222] = 1;
+  init_table[itpos238] = 1;
   return;
 }
-void parser___ReduceAction223___action(val_t p0, val_t p1){
+void parser___ReduceAction240___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7802;
-  fra.me.meth = LOCATE_parser___ReduceAction223___action;
+  fra.me.line = 8269;
+  fra.me.meth = LOCATE_parser___ReduceAction240___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -26311,80 +27878,80 @@ void parser___ReduceAction223___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7804 */
+  /* ./parser//parser.nit:8271 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7805 */
+  /* ./parser//parser.nit:8272 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7806 */
+  /* ./parser//parser.nit:8273 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7807 */
+  /* ./parser//parser.nit:8274 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7809 */
+  /* ./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, 7809);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8276);
   }
-  /* ./parser//parser.nit:7811 */
+  /* ./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, 7811);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8278);
   }
-  /* ./parser//parser.nit:7813 */
+  /* ./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, 7813);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8280);
   }
-  /* ./parser//parser.nit:7814 */
+  /* ./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:7819 */
+  /* ./parser//parser.nit:8286 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7820 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction223____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7820);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8287);
   }
-  REGB0 = ATTR_parser___ReduceAction223____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___ReduceAction223___init(val_t p0, val_t p1, int* init_table){
-  int itpos223 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction223].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[itpos223]) return;
+  if (init_table[itpos239]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7823;
-  fra.me.meth = LOCATE_parser___ReduceAction223___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:7823 */
+  /* ./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___ReduceAction223____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction240____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos223] = 1;
+  init_table[itpos239] = 1;
   return;
 }
-void parser___ReduceAction230___action(val_t p0, val_t p1){
+void parser___ReduceAction247___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7827;
-  fra.me.meth = LOCATE_parser___ReduceAction230___action;
+  fra.me.line = 8294;
+  fra.me.meth = LOCATE_parser___ReduceAction247___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -26397,91 +27964,91 @@ void parser___ReduceAction230___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7829 */
+  /* ./parser//parser.nit:8296 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7830 */
+  /* ./parser//parser.nit:8297 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7831 */
+  /* ./parser//parser.nit:8298 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7832 */
+  /* ./parser//parser.nit:8299 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7833 */
+  /* ./parser//parser.nit:8300 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7834 */
+  /* ./parser//parser.nit:8301 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7835 */
+  /* ./parser//parser.nit:8302 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7836 */
+  /* ./parser//parser.nit:8303 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7838 */
+  /* ./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, 7838);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8305);
   }
-  /* ./parser//parser.nit:7840 */
+  /* ./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, 7840);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8307);
   }
-  /* ./parser//parser.nit:7842 */
+  /* ./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, 7842);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8309);
   }
-  /* ./parser//parser.nit:7843 */
+  /* ./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:7844 */
+  /* ./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:7850 */
+  /* ./parser//parser.nit:8317 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:7851 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction230____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7851);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8318);
   }
-  REGB0 = ATTR_parser___ReduceAction230____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction247____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction230___init(val_t p0, val_t p1, int* init_table){
-  int itpos224 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction230].i;
+void parser___ReduceAction247___init(val_t p0, val_t p1, int* init_table){
+  int itpos240 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction247].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos224]) return;
+  if (init_table[itpos240]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7854;
-  fra.me.meth = LOCATE_parser___ReduceAction230___init;
+  fra.me.line = 8321;
+  fra.me.meth = LOCATE_parser___ReduceAction247___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7854 */
+  /* ./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___ReduceAction230____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction247____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos224] = 1;
+  init_table[itpos240] = 1;
   return;
 }
-void parser___ReduceAction231___action(val_t p0, val_t p1){
+void parser___ReduceAction248___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7858;
-  fra.me.meth = LOCATE_parser___ReduceAction231___action;
+  fra.me.line = 8325;
+  fra.me.meth = LOCATE_parser___ReduceAction248___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -26494,81 +28061,81 @@ void parser___ReduceAction231___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7860 */
+  /* ./parser//parser.nit:8327 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7861 */
+  /* ./parser//parser.nit:8328 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7862 */
+  /* ./parser//parser.nit:8329 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7863 */
+  /* ./parser//parser.nit:8330 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7864 */
+  /* ./parser//parser.nit:8331 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7865 */
+  /* ./parser//parser.nit:8332 */
   fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:7868 */
+  /* ./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, 7868);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8335);
   }
-  /* ./parser//parser.nit:7870 */
+  /* ./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, 7870);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8337);
   }
-  /* ./parser//parser.nit:7871 */
+  /* ./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:7872 */
+  /* ./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:7878 */
+  /* ./parser//parser.nit:8345 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:7879 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction231____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7879);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8346);
   }
-  REGB0 = ATTR_parser___ReduceAction231____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction248____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction231___init(val_t p0, val_t p1, int* init_table){
-  int itpos225 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction231].i;
+void parser___ReduceAction248___init(val_t p0, val_t p1, int* init_table){
+  int itpos241 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction248].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos225]) return;
+  if (init_table[itpos241]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7882;
-  fra.me.meth = LOCATE_parser___ReduceAction231___init;
+  fra.me.line = 8349;
+  fra.me.meth = LOCATE_parser___ReduceAction248___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7882 */
+  /* ./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___ReduceAction231____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction248____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos225] = 1;
+  init_table[itpos241] = 1;
   return;
 }
-void parser___ReduceAction232___action(val_t p0, val_t p1){
+void parser___ReduceAction249___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   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___ReduceAction232___action;
+  fra.me.line = 8353;
+  fra.me.meth = LOCATE_parser___ReduceAction249___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -26582,102 +28149,102 @@ void parser___ReduceAction232___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7888 */
+  /* ./parser//parser.nit:8355 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7889 */
+  /* ./parser//parser.nit:8356 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7890 */
+  /* ./parser//parser.nit:8357 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7891 */
+  /* ./parser//parser.nit:8358 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7892 */
+  /* ./parser//parser.nit:8359 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7893 */
+  /* ./parser//parser.nit:8360 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7894 */
+  /* ./parser//parser.nit:8361 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7895 */
+  /* ./parser//parser.nit:8362 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7896 */
+  /* ./parser//parser.nit:8363 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7898 */
+  /* ./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, 7898);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8365);
   }
-  /* ./parser//parser.nit:7900 */
+  /* ./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, 7900);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8367);
   }
-  /* ./parser//parser.nit:7902 */
+  /* ./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, 7902);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8369);
   }
-  /* ./parser//parser.nit:7903 */
+  /* ./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:7905 */
+  /* ./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, 7905);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8372);
   }
-  /* ./parser//parser.nit:7906 */
+  /* ./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:7907 */
+  /* ./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:7913 */
+  /* ./parser//parser.nit:8380 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:7914 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction232____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7914);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8381);
   }
-  REGB0 = ATTR_parser___ReduceAction232____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction249____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction232___init(val_t p0, val_t p1, int* init_table){
-  int itpos226 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction232].i;
+void parser___ReduceAction249___init(val_t p0, val_t p1, int* init_table){
+  int itpos242 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction249].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos226]) return;
+  if (init_table[itpos242]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7917;
-  fra.me.meth = LOCATE_parser___ReduceAction232___init;
+  fra.me.line = 8384;
+  fra.me.meth = LOCATE_parser___ReduceAction249___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7917 */
+  /* ./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___ReduceAction232____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction249____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos226] = 1;
+  init_table[itpos242] = 1;
   return;
 }
-void parser___ReduceAction233___action(val_t p0, val_t p1){
+void parser___ReduceAction250___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7921;
-  fra.me.meth = LOCATE_parser___ReduceAction233___action;
+  fra.me.line = 8388;
+  fra.me.meth = LOCATE_parser___ReduceAction250___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -26691,92 +28258,92 @@ void parser___ReduceAction233___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7923 */
+  /* ./parser//parser.nit:8390 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7924 */
+  /* ./parser//parser.nit:8391 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7925 */
+  /* ./parser//parser.nit:8392 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7926 */
+  /* ./parser//parser.nit:8393 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7927 */
+  /* ./parser//parser.nit:8394 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7928 */
+  /* ./parser//parser.nit:8395 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7929 */
+  /* ./parser//parser.nit:8396 */
   fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:7932 */
+  /* ./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, 7932);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8399);
   }
-  /* ./parser//parser.nit:7934 */
+  /* ./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, 7934);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8401);
   }
-  /* ./parser//parser.nit:7935 */
+  /* ./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:7937 */
+  /* ./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, 7937);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8404);
   }
-  /* ./parser//parser.nit:7938 */
+  /* ./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:7939 */
+  /* ./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:7945 */
+  /* ./parser//parser.nit:8412 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:7946 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction233____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:8413 */
+  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, 7946);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8413);
   }
-  REGB0 = ATTR_parser___ReduceAction233____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction250____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction233___init(val_t p0, val_t p1, int* init_table){
-  int itpos227 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction233].i;
+void parser___ReduceAction250___init(val_t p0, val_t p1, int* init_table){
+  int itpos243 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction250].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos227]) return;
+  if (init_table[itpos243]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7949;
-  fra.me.meth = LOCATE_parser___ReduceAction233___init;
+  fra.me.line = 8416;
+  fra.me.meth = LOCATE_parser___ReduceAction250___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7949 */
+  /* ./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___ReduceAction233____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction250____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos227] = 1;
+  init_table[itpos243] = 1;
   return;
 }
-void parser___ReduceAction234___action(val_t p0, val_t p1){
+void parser___ReduceAction251___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7953;
-  fra.me.meth = LOCATE_parser___ReduceAction234___action;
+  fra.me.line = 8420;
+  fra.me.meth = LOCATE_parser___ReduceAction251___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -26787,77 +28354,77 @@ void parser___ReduceAction234___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7955 */
+  /* ./parser//parser.nit:8422 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7956 */
+  /* ./parser//parser.nit:8423 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7957 */
+  /* ./parser//parser.nit:8424 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7958 */
+  /* ./parser//parser.nit:8425 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7960 */
+  /* ./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, 7960);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8427);
   }
-  /* ./parser//parser.nit:7962 */
+  /* ./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, 7962);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8429);
   }
-  /* ./parser//parser.nit:7963 */
+  /* ./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:7964 */
+  /* ./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:7969 */
+  /* ./parser//parser.nit:8436 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7970 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction234____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7970);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8437);
   }
-  REGB0 = ATTR_parser___ReduceAction234____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction251____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction234___init(val_t p0, val_t p1, int* init_table){
-  int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction234].i;
+void parser___ReduceAction251___init(val_t p0, val_t p1, int* init_table){
+  int itpos244 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction251].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos228]) return;
+  if (init_table[itpos244]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7973;
-  fra.me.meth = LOCATE_parser___ReduceAction234___init;
+  fra.me.line = 8440;
+  fra.me.meth = LOCATE_parser___ReduceAction251___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:7973 */
+  /* ./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___ReduceAction234____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction251____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos228] = 1;
+  init_table[itpos244] = 1;
   return;
 }
-void parser___ReduceAction235___action(val_t p0, val_t p1){
+void parser___ReduceAction252___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7977;
-  fra.me.meth = LOCATE_parser___ReduceAction235___action;
+  fra.me.line = 8444;
+  fra.me.meth = LOCATE_parser___ReduceAction252___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -26869,85 +28436,85 @@ void parser___ReduceAction235___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7979 */
+  /* ./parser//parser.nit:8446 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7980 */
+  /* ./parser//parser.nit:8447 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7981 */
+  /* ./parser//parser.nit:8448 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7982 */
+  /* ./parser//parser.nit:8449 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7983 */
+  /* ./parser//parser.nit:8450 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7985 */
+  /* ./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, 7985);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8452);
   }
-  /* ./parser//parser.nit:7987 */
+  /* ./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, 7987);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8454);
   }
-  /* ./parser//parser.nit:7989 */
+  /* ./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, 7989);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8456);
   }
-  /* ./parser//parser.nit:7990 */
+  /* ./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:7991 */
+  /* ./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:7996 */
+  /* ./parser//parser.nit:8463 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:7997 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction235____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 7997);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8464);
   }
-  REGB0 = ATTR_parser___ReduceAction235____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction252____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction235___init(val_t p0, val_t p1, int* init_table){
-  int itpos229 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction235].i;
+void parser___ReduceAction252___init(val_t p0, val_t p1, int* init_table){
+  int itpos245 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction252].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos229]) return;
+  if (init_table[itpos245]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8000;
-  fra.me.meth = LOCATE_parser___ReduceAction235___init;
+  fra.me.line = 8467;
+  fra.me.meth = LOCATE_parser___ReduceAction252___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8000 */
+  /* ./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___ReduceAction235____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction252____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos229] = 1;
+  init_table[itpos245] = 1;
   return;
 }
-void parser___ReduceAction236___action(val_t p0, val_t p1){
+void parser___ReduceAction253___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8004;
-  fra.me.meth = LOCATE_parser___ReduceAction236___action;
+  fra.me.line = 8471;
+  fra.me.meth = LOCATE_parser___ReduceAction253___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -26959,89 +28526,89 @@ void parser___ReduceAction236___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8006 */
+  /* ./parser//parser.nit:8473 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8007 */
+  /* ./parser//parser.nit:8474 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8008 */
+  /* ./parser//parser.nit:8475 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8009 */
+  /* ./parser//parser.nit:8476 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8010 */
+  /* ./parser//parser.nit:8477 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8011 */
+  /* ./parser//parser.nit:8478 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8012 */
+  /* ./parser//parser.nit:8479 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8014 */
+  /* ./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, 8014);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8481);
   }
-  /* ./parser//parser.nit:8016 */
+  /* ./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, 8016);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8483);
   }
-  /* ./parser//parser.nit:8018 */
+  /* ./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, 8018);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8485);
   }
-  /* ./parser//parser.nit:8019 */
+  /* ./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:8020 */
+  /* ./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:8025 */
+  /* ./parser//parser.nit:8492 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:8026 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction236____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8026);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8493);
   }
-  REGB0 = ATTR_parser___ReduceAction236____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction253____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction236___init(val_t p0, val_t p1, int* init_table){
-  int itpos230 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction236].i;
+void parser___ReduceAction253___init(val_t p0, val_t p1, int* init_table){
+  int itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction253].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos230]) return;
+  if (init_table[itpos246]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8029;
-  fra.me.meth = LOCATE_parser___ReduceAction236___init;
+  fra.me.line = 8496;
+  fra.me.meth = LOCATE_parser___ReduceAction253___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8029 */
+  /* ./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___ReduceAction236____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction253____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos230] = 1;
+  init_table[itpos246] = 1;
   return;
 }
-void parser___ReduceAction237___action(val_t p0, val_t p1){
+void parser___ReduceAction254___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8033;
-  fra.me.meth = LOCATE_parser___ReduceAction237___action;
+  fra.me.line = 8500;
+  fra.me.meth = LOCATE_parser___ReduceAction254___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -27053,79 +28620,79 @@ void parser___ReduceAction237___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8035 */
+  /* ./parser//parser.nit:8502 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8036 */
+  /* ./parser//parser.nit:8503 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8037 */
+  /* ./parser//parser.nit:8504 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8038 */
+  /* ./parser//parser.nit:8505 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8039 */
+  /* ./parser//parser.nit:8506 */
   fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8042 */
+  /* ./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, 8042);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8509);
   }
-  /* ./parser//parser.nit:8044 */
+  /* ./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, 8044);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8511);
   }
-  /* ./parser//parser.nit:8045 */
+  /* ./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:8046 */
+  /* ./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:8051 */
+  /* ./parser//parser.nit:8518 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:8052 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction237____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8052);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8519);
   }
-  REGB0 = ATTR_parser___ReduceAction237____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction254____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction237___init(val_t p0, val_t p1, int* init_table){
-  int itpos231 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction237].i;
+void parser___ReduceAction254___init(val_t p0, val_t p1, int* init_table){
+  int itpos247 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction254].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos231]) return;
+  if (init_table[itpos247]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8055;
-  fra.me.meth = LOCATE_parser___ReduceAction237___init;
+  fra.me.line = 8522;
+  fra.me.meth = LOCATE_parser___ReduceAction254___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8055 */
+  /* ./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___ReduceAction237____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction254____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos231] = 1;
+  init_table[itpos247] = 1;
   return;
 }
-void parser___ReduceAction238___action(val_t p0, val_t p1){
+void parser___ReduceAction255___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8059;
-  fra.me.meth = LOCATE_parser___ReduceAction238___action;
+  fra.me.line = 8526;
+  fra.me.meth = LOCATE_parser___ReduceAction255___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -27135,73 +28702,73 @@ 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:8061 */
+  /* ./parser//parser.nit:8528 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8062 */
+  /* ./parser//parser.nit:8529 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8063 */
+  /* ./parser//parser.nit:8530 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8065 */
+  /* ./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 {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8065);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8532);
   }
-  /* ./parser//parser.nit:8067 */
+  /* ./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)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8067);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8534);
   }
-  /* ./parser//parser.nit:8068 */
+  /* ./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:8072 */
+  /* ./parser//parser.nit:8539 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8073 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction238____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8073);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8540);
   }
-  REGB0 = ATTR_parser___ReduceAction238____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction255____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction238___init(val_t p0, val_t p1, int* init_table){
-  int itpos232 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction238].i;
+void parser___ReduceAction255___init(val_t p0, val_t p1, int* init_table){
+  int itpos248 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction255].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos232]) return;
+  if (init_table[itpos248]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8076;
-  fra.me.meth = LOCATE_parser___ReduceAction238___init;
+  fra.me.line = 8543;
+  fra.me.meth = LOCATE_parser___ReduceAction255___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8076 */
+  /* ./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___ReduceAction238____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction255____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos232] = 1;
+  init_table[itpos248] = 1;
   return;
 }
-void parser___ReduceAction239___action(val_t p0, val_t p1){
+void parser___ReduceAction256___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8080;
-  fra.me.meth = LOCATE_parser___ReduceAction239___action;
+  fra.me.line = 8547;
+  fra.me.meth = LOCATE_parser___ReduceAction256___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -27211,13 +28778,13 @@ void parser___ReduceAction239___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8082 */
+  /* ./parser//parser.nit:8549 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8083 */
+  /* ./parser//parser.nit:8550 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8084 */
+  /* ./parser//parser.nit:8551 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8086 */
+  /* ./parser//parser.nit:8553 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -27232,56 +28799,56 @@ void parser___ReduceAction239___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:8087 */
+    /* ./parser//parser.nit:8554 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:8089 */
+  /* ./parser//parser.nit:8556 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:8090 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction239____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8090);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8557);
   }
-  REGB0 = ATTR_parser___ReduceAction239____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction256____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction239___init(val_t p0, val_t p1, int* init_table){
-  int itpos233 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction239].i;
+void parser___ReduceAction256___init(val_t p0, val_t p1, int* init_table){
+  int itpos249 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction256].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos233]) return;
+  if (init_table[itpos249]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8093;
-  fra.me.meth = LOCATE_parser___ReduceAction239___init;
+  fra.me.line = 8560;
+  fra.me.meth = LOCATE_parser___ReduceAction256___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8093 */
+  /* ./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___ReduceAction239____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction256____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos233] = 1;
+  init_table[itpos249] = 1;
   return;
 }
-void parser___ReduceAction240___action(val_t p0, val_t p1){
+void parser___ReduceAction257___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8097;
-  fra.me.meth = LOCATE_parser___ReduceAction240___action;
+  fra.me.line = 8564;
+  fra.me.meth = LOCATE_parser___ReduceAction257___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -27292,21 +28859,21 @@ void parser___ReduceAction240___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8099 */
+  /* ./parser//parser.nit:8566 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8100 */
+  /* ./parser//parser.nit:8567 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8101 */
+  /* ./parser//parser.nit:8568 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8102 */
+  /* ./parser//parser.nit:8569 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8105 */
+  /* ./parser//parser.nit:8572 */
   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, 8105);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8572);
   }
-  /* ./parser//parser.nit:8106 */
+  /* ./parser//parser.nit:8573 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -27321,58 +28888,58 @@ void parser___ReduceAction240___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:8107 */
+    /* ./parser//parser.nit:8574 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:8109 */
+  /* ./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:8110 */
+  /* ./parser//parser.nit:8577 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:8111 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction240____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8111);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8578);
   }
-  REGB0 = ATTR_parser___ReduceAction240____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction257____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction240___init(val_t p0, val_t p1, int* init_table){
-  int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction240].i;
+void parser___ReduceAction257___init(val_t p0, val_t p1, int* init_table){
+  int itpos250 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction257].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos234]) return;
+  if (init_table[itpos250]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8114;
-  fra.me.meth = LOCATE_parser___ReduceAction240___init;
+  fra.me.line = 8581;
+  fra.me.meth = LOCATE_parser___ReduceAction257___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8114 */
+  /* ./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___ReduceAction240____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction257____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos234] = 1;
+  init_table[itpos250] = 1;
   return;
 }
-void parser___ReduceAction241___action(val_t p0, val_t p1){
+void parser___ReduceAction258___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8118;
-  fra.me.meth = LOCATE_parser___ReduceAction241___action;
+  fra.me.line = 8585;
+  fra.me.meth = LOCATE_parser___ReduceAction258___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -27386,98 +28953,98 @@ void parser___ReduceAction241___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8120 */
+  /* ./parser//parser.nit:8587 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8121 */
+  /* ./parser//parser.nit:8588 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8122 */
+  /* ./parser//parser.nit:8589 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8123 */
+  /* ./parser//parser.nit:8590 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8124 */
+  /* ./parser//parser.nit:8591 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8125 */
+  /* ./parser//parser.nit:8592 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8126 */
+  /* ./parser//parser.nit:8593 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8128 */
+  /* ./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, 8128);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8595);
   }
-  /* ./parser//parser.nit:8130 */
+  /* ./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, 8130);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8597);
   }
-  /* ./parser//parser.nit:8132 */
+  /* ./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, 8132);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8599);
   }
-  /* ./parser//parser.nit:8134 */
+  /* ./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, 8134);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8601);
   }
-  /* ./parser//parser.nit:8136 */
+  /* ./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, 8136);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8603);
   }
-  /* ./parser//parser.nit:8137 */
+  /* ./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:8145 */
+  /* ./parser//parser.nit:8612 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8146 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction241____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8146);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8613);
   }
-  REGB0 = ATTR_parser___ReduceAction241____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction258____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction241___init(val_t p0, val_t p1, int* init_table){
-  int itpos235 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction241].i;
+void parser___ReduceAction258___init(val_t p0, val_t p1, int* init_table){
+  int itpos251 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction258].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos235]) return;
+  if (init_table[itpos251]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8149;
-  fra.me.meth = LOCATE_parser___ReduceAction241___init;
+  fra.me.line = 8616;
+  fra.me.meth = LOCATE_parser___ReduceAction258___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8149 */
+  /* ./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___ReduceAction241____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction258____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos235] = 1;
+  init_table[itpos251] = 1;
   return;
 }
-void parser___ReduceAction242___action(val_t p0, val_t p1){
+void parser___ReduceAction259___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8153;
-  fra.me.meth = LOCATE_parser___ReduceAction242___action;
+  fra.me.line = 8620;
+  fra.me.meth = LOCATE_parser___ReduceAction259___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -27492,109 +29059,109 @@ void parser___ReduceAction242___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8155 */
+  /* ./parser//parser.nit:8622 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8156 */
+  /* ./parser//parser.nit:8623 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8157 */
+  /* ./parser//parser.nit:8624 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8158 */
+  /* ./parser//parser.nit:8625 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8159 */
+  /* ./parser//parser.nit:8626 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8160 */
+  /* ./parser//parser.nit:8627 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8161 */
+  /* ./parser//parser.nit:8628 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8162 */
+  /* ./parser//parser.nit:8629 */
   fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8164 */
+  /* ./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, 8164);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8631);
   }
-  /* ./parser//parser.nit:8166 */
+  /* ./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, 8166);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8633);
   }
-  /* ./parser//parser.nit:8168 */
+  /* ./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, 8168);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8635);
   }
-  /* ./parser//parser.nit:8169 */
+  /* ./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:8171 */
+  /* ./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, 8171);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8638);
   }
-  /* ./parser//parser.nit:8173 */
+  /* ./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, 8173);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8640);
   }
-  /* ./parser//parser.nit:8175 */
+  /* ./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, 8175);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8642);
   }
-  /* ./parser//parser.nit:8176 */
+  /* ./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:8184 */
+  /* ./parser//parser.nit:8651 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8185 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction242____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8185);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8652);
   }
-  REGB0 = ATTR_parser___ReduceAction242____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction259____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction242___init(val_t p0, val_t p1, int* init_table){
-  int itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction242].i;
+void parser___ReduceAction259___init(val_t p0, val_t p1, int* init_table){
+  int itpos252 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction259].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos236]) return;
+  if (init_table[itpos252]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8188;
-  fra.me.meth = LOCATE_parser___ReduceAction242___init;
+  fra.me.line = 8655;
+  fra.me.meth = LOCATE_parser___ReduceAction259___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8188 */
+  /* ./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___ReduceAction242____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction259____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos236] = 1;
+  init_table[itpos252] = 1;
   return;
 }
-void parser___ReduceAction243___action(val_t p0, val_t p1){
+void parser___ReduceAction260___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8192;
-  fra.me.meth = LOCATE_parser___ReduceAction243___action;
+  fra.me.line = 8659;
+  fra.me.meth = LOCATE_parser___ReduceAction260___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -27607,90 +29174,90 @@ void parser___ReduceAction243___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:8194 */
+  /* ./parser//parser.nit:8661 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8195 */
+  /* ./parser//parser.nit:8662 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8196 */
+  /* ./parser//parser.nit:8663 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8197 */
+  /* ./parser//parser.nit:8664 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8198 */
+  /* ./parser//parser.nit:8665 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8199 */
+  /* ./parser//parser.nit:8666 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8201 */
+  /* ./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, 8201);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8668);
   }
-  /* ./parser//parser.nit:8203 */
+  /* ./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, 8203);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8670);
   }
-  /* ./parser//parser.nit:8205 */
+  /* ./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, 8205);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8672);
   }
-  /* ./parser//parser.nit:8207 */
+  /* ./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, 8207);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8674);
   }
-  /* ./parser//parser.nit:8208 */
+  /* ./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:8216 */
+  /* ./parser//parser.nit:8683 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8217 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction243____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8217);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8684);
   }
-  REGB0 = ATTR_parser___ReduceAction243____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction260____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction243___init(val_t p0, val_t p1, int* init_table){
-  int itpos237 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction243].i;
+void parser___ReduceAction260___init(val_t p0, val_t p1, int* init_table){
+  int itpos253 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction260].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos237]) return;
+  if (init_table[itpos253]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8220;
-  fra.me.meth = LOCATE_parser___ReduceAction243___init;
+  fra.me.line = 8687;
+  fra.me.meth = LOCATE_parser___ReduceAction260___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8220 */
+  /* ./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___ReduceAction243____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction260____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos237] = 1;
+  init_table[itpos253] = 1;
   return;
 }
-void parser___ReduceAction244___action(val_t p0, val_t p1){
+void parser___ReduceAction261___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8224;
-  fra.me.meth = LOCATE_parser___ReduceAction244___action;
+  fra.me.line = 8691;
+  fra.me.meth = LOCATE_parser___ReduceAction261___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -27704,101 +29271,101 @@ void parser___ReduceAction244___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:8226 */
+  /* ./parser//parser.nit:8693 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8227 */
+  /* ./parser//parser.nit:8694 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8228 */
+  /* ./parser//parser.nit:8695 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8229 */
+  /* ./parser//parser.nit:8696 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8230 */
+  /* ./parser//parser.nit:8697 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8231 */
+  /* ./parser//parser.nit:8698 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8232 */
+  /* ./parser//parser.nit:8699 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8234 */
+  /* ./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, 8234);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8701);
   }
-  /* ./parser//parser.nit:8236 */
+  /* ./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, 8236);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8703);
   }
-  /* ./parser//parser.nit:8238 */
+  /* ./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, 8238);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8705);
   }
-  /* ./parser//parser.nit:8239 */
+  /* ./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:8241 */
+  /* ./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, 8241);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8708);
   }
-  /* ./parser//parser.nit:8243 */
+  /* ./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, 8243);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8710);
   }
-  /* ./parser//parser.nit:8244 */
+  /* ./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:8252 */
+  /* ./parser//parser.nit:8719 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8253 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction244____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8253);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8720);
   }
-  REGB0 = ATTR_parser___ReduceAction244____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction261____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction244___init(val_t p0, val_t p1, int* init_table){
-  int itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction244].i;
+void parser___ReduceAction261___init(val_t p0, val_t p1, int* init_table){
+  int itpos254 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction261].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos238]) return;
+  if (init_table[itpos254]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8256;
-  fra.me.meth = LOCATE_parser___ReduceAction244___init;
+  fra.me.line = 8723;
+  fra.me.meth = LOCATE_parser___ReduceAction261___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8256 */
+  /* ./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___ReduceAction244____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction261____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos238] = 1;
+  init_table[itpos254] = 1;
   return;
 }
-void parser___ReduceAction245___action(val_t p0, val_t p1){
+void parser___ReduceAction262___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8260;
-  fra.me.meth = LOCATE_parser___ReduceAction245___action;
+  fra.me.line = 8727;
+  fra.me.meth = LOCATE_parser___ReduceAction262___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -27810,86 +29377,86 @@ void parser___ReduceAction245___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:8262 */
+  /* ./parser//parser.nit:8729 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8263 */
+  /* ./parser//parser.nit:8730 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8264 */
+  /* ./parser//parser.nit:8731 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8265 */
+  /* ./parser//parser.nit:8732 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8266 */
+  /* ./parser//parser.nit:8733 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8267 */
+  /* ./parser//parser.nit:8734 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8268 */
+  /* ./parser//parser.nit:8735 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8270 */
+  /* ./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, 8270);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8737);
   }
-  /* ./parser//parser.nit:8272 */
+  /* ./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, 8272);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8739);
   }
-  /* ./parser//parser.nit:8274 */
+  /* ./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, 8274);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8741);
   }
-  /* ./parser//parser.nit:8275 */
+  /* ./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:8283 */
+  /* ./parser//parser.nit:8750 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8284 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction245____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8284);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8751);
   }
-  REGB0 = ATTR_parser___ReduceAction245____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction262____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction245___init(val_t p0, val_t p1, int* init_table){
-  int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction245].i;
+void parser___ReduceAction262___init(val_t p0, val_t p1, int* init_table){
+  int itpos255 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction262].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos239]) return;
+  if (init_table[itpos255]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8287;
-  fra.me.meth = LOCATE_parser___ReduceAction245___init;
+  fra.me.line = 8754;
+  fra.me.meth = LOCATE_parser___ReduceAction262___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8287 */
+  /* ./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___ReduceAction245____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction262____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos239] = 1;
+  init_table[itpos255] = 1;
   return;
 }
-void parser___ReduceAction246___action(val_t p0, val_t p1){
+void parser___ReduceAction263___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8291;
-  fra.me.meth = LOCATE_parser___ReduceAction246___action;
+  fra.me.line = 8758;
+  fra.me.meth = LOCATE_parser___ReduceAction263___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -27902,97 +29469,97 @@ void parser___ReduceAction246___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:8293 */
+  /* ./parser//parser.nit:8760 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8294 */
+  /* ./parser//parser.nit:8761 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8295 */
+  /* ./parser//parser.nit:8762 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8296 */
+  /* ./parser//parser.nit:8763 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8297 */
+  /* ./parser//parser.nit:8764 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8298 */
+  /* ./parser//parser.nit:8765 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8299 */
+  /* ./parser//parser.nit:8766 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8300 */
+  /* ./parser//parser.nit:8767 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8302 */
+  /* ./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, 8302);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8769);
   }
-  /* ./parser//parser.nit:8304 */
+  /* ./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, 8304);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8771);
   }
-  /* ./parser//parser.nit:8306 */
+  /* ./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, 8306);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8773);
   }
-  /* ./parser//parser.nit:8307 */
+  /* ./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:8309 */
+  /* ./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, 8309);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8776);
   }
-  /* ./parser//parser.nit:8310 */
+  /* ./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:8318 */
+  /* ./parser//parser.nit:8785 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8319 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction246____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8319);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8786);
   }
-  REGB0 = ATTR_parser___ReduceAction246____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction263____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos240 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction246].i;
+void parser___ReduceAction263___init(val_t p0, val_t p1, int* init_table){
+  int itpos256 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction263].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos240]) return;
+  if (init_table[itpos256]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8322;
-  fra.me.meth = LOCATE_parser___ReduceAction246___init;
+  fra.me.line = 8789;
+  fra.me.meth = LOCATE_parser___ReduceAction263___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8322 */
+  /* ./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___ReduceAction246____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction263____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos240] = 1;
+  init_table[itpos256] = 1;
   return;
 }
-void parser___ReduceAction247___action(val_t p0, val_t p1){
+void parser___ReduceAction264___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8326;
-  fra.me.meth = LOCATE_parser___ReduceAction247___action;
+  fra.me.line = 8793;
+  fra.me.meth = LOCATE_parser___ReduceAction264___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -28005,92 +29572,92 @@ 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:8328 */
+  /* ./parser//parser.nit:8795 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8329 */
+  /* ./parser//parser.nit:8796 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8330 */
+  /* ./parser//parser.nit:8797 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8331 */
+  /* ./parser//parser.nit:8798 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8332 */
+  /* ./parser//parser.nit:8799 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8333 */
+  /* ./parser//parser.nit:8800 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8334 */
+  /* ./parser//parser.nit:8801 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8336 */
+  /* ./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, 8336);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8803);
   }
-  /* ./parser//parser.nit:8338 */
+  /* ./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, 8338);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8805);
   }
-  /* ./parser//parser.nit:8340 */
+  /* ./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, 8340);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8807);
   }
-  /* ./parser//parser.nit:8342 */
+  /* ./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, 8342);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8809);
   }
-  /* ./parser//parser.nit:8343 */
+  /* ./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:8351 */
+  /* ./parser//parser.nit:8818 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8352 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction247____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8352);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8819);
   }
-  REGB0 = ATTR_parser___ReduceAction247____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction264____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction247___init(val_t p0, val_t p1, int* init_table){
-  int itpos241 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction247].i;
+void parser___ReduceAction264___init(val_t p0, val_t p1, int* init_table){
+  int itpos257 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction264].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos241]) return;
+  if (init_table[itpos257]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8355;
-  fra.me.meth = LOCATE_parser___ReduceAction247___init;
+  fra.me.line = 8822;
+  fra.me.meth = LOCATE_parser___ReduceAction264___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8355 */
+  /* ./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___ReduceAction247____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction264____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos241] = 1;
+  init_table[itpos257] = 1;
   return;
 }
-void parser___ReduceAction248___action(val_t p0, val_t p1){
+void parser___ReduceAction265___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8359;
-  fra.me.meth = LOCATE_parser___ReduceAction248___action;
+  fra.me.line = 8826;
+  fra.me.meth = LOCATE_parser___ReduceAction265___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -28104,103 +29671,103 @@ void parser___ReduceAction248___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:8361 */
+  /* ./parser//parser.nit:8828 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8362 */
+  /* ./parser//parser.nit:8829 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8363 */
+  /* ./parser//parser.nit:8830 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8364 */
+  /* ./parser//parser.nit:8831 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8365 */
+  /* ./parser//parser.nit:8832 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8366 */
+  /* ./parser//parser.nit:8833 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8367 */
+  /* ./parser//parser.nit:8834 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8368 */
+  /* ./parser//parser.nit:8835 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8370 */
+  /* ./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, 8370);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8837);
   }
-  /* ./parser//parser.nit:8372 */
+  /* ./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, 8372);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8839);
   }
-  /* ./parser//parser.nit:8374 */
+  /* ./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, 8374);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8841);
   }
-  /* ./parser//parser.nit:8375 */
+  /* ./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:8377 */
+  /* ./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, 8377);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8844);
   }
-  /* ./parser//parser.nit:8379 */
+  /* ./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, 8379);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8846);
   }
-  /* ./parser//parser.nit:8380 */
+  /* ./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:8388 */
+  /* ./parser//parser.nit:8855 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8389 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction248____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8389);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8856);
   }
-  REGB0 = ATTR_parser___ReduceAction248____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction265____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction248___init(val_t p0, val_t p1, int* init_table){
-  int itpos242 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction248].i;
+void parser___ReduceAction265___init(val_t p0, val_t p1, int* init_table){
+  int itpos258 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction265].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos242]) return;
+  if (init_table[itpos258]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8392;
-  fra.me.meth = LOCATE_parser___ReduceAction248___init;
+  fra.me.line = 8859;
+  fra.me.meth = LOCATE_parser___ReduceAction265___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8392 */
+  /* ./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___ReduceAction248____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction265____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos242] = 1;
+  init_table[itpos258] = 1;
   return;
 }
-void parser___ReduceAction249___action(val_t p0, val_t p1){
+void parser___ReduceAction266___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8396;
-  fra.me.meth = LOCATE_parser___ReduceAction249___action;
+  fra.me.line = 8863;
+  fra.me.meth = LOCATE_parser___ReduceAction266___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -28212,84 +29779,84 @@ void parser___ReduceAction249___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:8398 */
+  /* ./parser//parser.nit:8865 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8399 */
+  /* ./parser//parser.nit:8866 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8400 */
+  /* ./parser//parser.nit:8867 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8401 */
+  /* ./parser//parser.nit:8868 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8402 */
+  /* ./parser//parser.nit:8869 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8403 */
+  /* ./parser//parser.nit:8870 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8405 */
+  /* ./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, 8405);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8872);
   }
-  /* ./parser//parser.nit:8407 */
+  /* ./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, 8407);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8874);
   }
-  /* ./parser//parser.nit:8409 */
+  /* ./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, 8409);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8876);
   }
-  /* ./parser//parser.nit:8410 */
+  /* ./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:8418 */
+  /* ./parser//parser.nit:8885 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8419 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction249____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8419);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8886);
   }
-  REGB0 = ATTR_parser___ReduceAction249____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction266____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction249___init(val_t p0, val_t p1, int* init_table){
-  int itpos243 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction249].i;
+void parser___ReduceAction266___init(val_t p0, val_t p1, int* init_table){
+  int itpos259 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction266].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos243]) return;
+  if (init_table[itpos259]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8422;
-  fra.me.meth = LOCATE_parser___ReduceAction249___init;
+  fra.me.line = 8889;
+  fra.me.meth = LOCATE_parser___ReduceAction266___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8422 */
+  /* ./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___ReduceAction249____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction266____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos243] = 1;
+  init_table[itpos259] = 1;
   return;
 }
-void parser___ReduceAction250___action(val_t p0, val_t p1){
+void parser___ReduceAction267___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8426;
-  fra.me.meth = LOCATE_parser___ReduceAction250___action;
+  fra.me.line = 8893;
+  fra.me.meth = LOCATE_parser___ReduceAction267___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -28302,95 +29869,95 @@ void parser___ReduceAction250___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8428 */
+  /* ./parser//parser.nit:8895 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8429 */
+  /* ./parser//parser.nit:8896 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8430 */
+  /* ./parser//parser.nit:8897 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8431 */
+  /* ./parser//parser.nit:8898 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8432 */
+  /* ./parser//parser.nit:8899 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8433 */
+  /* ./parser//parser.nit:8900 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8434 */
+  /* ./parser//parser.nit:8901 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8436 */
+  /* ./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, 8436);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8903);
   }
-  /* ./parser//parser.nit:8438 */
+  /* ./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, 8438);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8905);
   }
-  /* ./parser//parser.nit:8440 */
+  /* ./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, 8440);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8907);
   }
-  /* ./parser//parser.nit:8441 */
+  /* ./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:8443 */
+  /* ./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, 8443);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8910);
   }
-  /* ./parser//parser.nit:8444 */
+  /* ./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:8452 */
+  /* ./parser//parser.nit:8919 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8453 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction250____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8453);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8920);
   }
-  REGB0 = ATTR_parser___ReduceAction250____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction267____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction250___init(val_t p0, val_t p1, int* init_table){
-  int itpos244 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction250].i;
+void parser___ReduceAction267___init(val_t p0, val_t p1, int* init_table){
+  int itpos260 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction267].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos244]) return;
+  if (init_table[itpos260]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8456;
-  fra.me.meth = LOCATE_parser___ReduceAction250___init;
+  fra.me.line = 8923;
+  fra.me.meth = LOCATE_parser___ReduceAction267___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8456 */
+  /* ./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___ReduceAction250____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction267____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos244] = 1;
+  init_table[itpos260] = 1;
   return;
 }
-void parser___ReduceAction251___action(val_t p0, val_t p1){
+void parser___ReduceAction268___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8460;
-  fra.me.meth = LOCATE_parser___ReduceAction251___action;
+  fra.me.line = 8927;
+  fra.me.meth = LOCATE_parser___ReduceAction268___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -28399,64 +29966,64 @@ void parser___ReduceAction251___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:8462 */
+  /* ./parser//parser.nit:8929 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8463 */
+  /* ./parser//parser.nit:8930 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8465 */
+  /* ./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, 8465);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8932);
   }
-  /* ./parser//parser.nit:8466 */
+  /* ./parser//parser.nit:8933 */
   fra.me.REG[3] = NEW_ASimpleClosureId_parser_prod___ASimpleClosureId___init_asimpleclosureid(fra.me.REG[3]);
-  /* ./parser//parser.nit:8469 */
+  /* ./parser//parser.nit:8936 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8470 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction251____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8470);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8937);
   }
-  REGB0 = ATTR_parser___ReduceAction251____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction268____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction251___init(val_t p0, val_t p1, int* init_table){
-  int itpos245 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction251].i;
+void parser___ReduceAction268___init(val_t p0, val_t p1, int* init_table){
+  int itpos261 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction268].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos245]) return;
+  if (init_table[itpos261]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8473;
-  fra.me.meth = LOCATE_parser___ReduceAction251___init;
+  fra.me.line = 8940;
+  fra.me.meth = LOCATE_parser___ReduceAction268___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8473 */
+  /* ./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___ReduceAction251____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction268____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos245] = 1;
+  init_table[itpos261] = 1;
   return;
 }
-void parser___ReduceAction252___action(val_t p0, val_t p1){
+void parser___ReduceAction269___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8477;
-  fra.me.meth = LOCATE_parser___ReduceAction252___action;
+  fra.me.line = 8944;
+  fra.me.meth = LOCATE_parser___ReduceAction269___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -28465,64 +30032,64 @@ void parser___ReduceAction252___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:8479 */
+  /* ./parser//parser.nit:8946 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8480 */
+  /* ./parser//parser.nit:8947 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8482 */
+  /* ./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, 8482);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8949);
   }
-  /* ./parser//parser.nit:8483 */
+  /* ./parser//parser.nit:8950 */
   fra.me.REG[3] = NEW_ABreakClosureId_parser_prod___ABreakClosureId___init_abreakclosureid(fra.me.REG[3]);
-  /* ./parser//parser.nit:8486 */
+  /* ./parser//parser.nit:8953 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8487 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction252____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8487);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8954);
   }
-  REGB0 = ATTR_parser___ReduceAction252____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction269____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction252___init(val_t p0, val_t p1, int* init_table){
-  int itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction252].i;
+void parser___ReduceAction269___init(val_t p0, val_t p1, int* init_table){
+  int itpos262 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction269].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos246]) return;
+  if (init_table[itpos262]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8490;
-  fra.me.meth = LOCATE_parser___ReduceAction252___init;
+  fra.me.line = 8957;
+  fra.me.meth = LOCATE_parser___ReduceAction269___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8490 */
+  /* ./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___ReduceAction252____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction269____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos246] = 1;
+  init_table[itpos262] = 1;
   return;
 }
-void parser___ReduceAction253___action(val_t p0, val_t p1){
+void parser___ReduceAction270___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8494;
-  fra.me.meth = LOCATE_parser___ReduceAction253___action;
+  fra.me.line = 8961;
+  fra.me.meth = LOCATE_parser___ReduceAction270___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -28531,64 +30098,64 @@ void parser___ReduceAction253___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:8496 */
+  /* ./parser//parser.nit:8963 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8497 */
+  /* ./parser//parser.nit:8964 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8499 */
+  /* ./parser//parser.nit:8966 */
   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, 8499);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8966);
   }
-  /* ./parser//parser.nit:8500 */
+  /* ./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:8505 */
+  /* ./parser//parser.nit:8972 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8506 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction253____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8506);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8973);
   }
-  REGB0 = ATTR_parser___ReduceAction253____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction270____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction253___init(val_t p0, val_t p1, int* init_table){
-  int itpos247 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction253].i;
+void parser___ReduceAction270___init(val_t p0, val_t p1, int* init_table){
+  int itpos263 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction270].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos247]) return;
+  if (init_table[itpos263]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8509;
-  fra.me.meth = LOCATE_parser___ReduceAction253___init;
+  fra.me.line = 8976;
+  fra.me.meth = LOCATE_parser___ReduceAction270___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8509 */
+  /* ./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___ReduceAction253____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction270____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos247] = 1;
+  init_table[itpos263] = 1;
   return;
 }
-void parser___ReduceAction254___action(val_t p0, val_t p1){
+void parser___ReduceAction271___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8513;
-  fra.me.meth = LOCATE_parser___ReduceAction254___action;
+  fra.me.line = 8980;
+  fra.me.meth = LOCATE_parser___ReduceAction271___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -28598,72 +30165,72 @@ void parser___ReduceAction254___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8515 */
+  /* ./parser//parser.nit:8982 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8516 */
+  /* ./parser//parser.nit:8983 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8517 */
+  /* ./parser//parser.nit:8984 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8519 */
+  /* ./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, 8519);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8986);
   }
-  /* ./parser//parser.nit:8521 */
+  /* ./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, 8521);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8988);
   }
-  /* ./parser//parser.nit:8522 */
+  /* ./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:8529 */
+  /* ./parser//parser.nit:8996 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8530 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction254____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8530);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8997);
   }
-  REGB0 = ATTR_parser___ReduceAction254____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction271____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction254___init(val_t p0, val_t p1, int* init_table){
-  int itpos248 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction254].i;
+void parser___ReduceAction271___init(val_t p0, val_t p1, int* init_table){
+  int itpos264 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction271].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos248]) return;
+  if (init_table[itpos264]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8533;
-  fra.me.meth = LOCATE_parser___ReduceAction254___init;
+  fra.me.line = 9000;
+  fra.me.meth = LOCATE_parser___ReduceAction271___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8533 */
+  /* ./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___ReduceAction254____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction271____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos248] = 1;
+  init_table[itpos264] = 1;
   return;
 }
-void parser___ReduceAction255___action(val_t p0, val_t p1){
+void parser___ReduceAction272___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8537;
-  fra.me.meth = LOCATE_parser___ReduceAction255___action;
+  fra.me.line = 9004;
+  fra.me.meth = LOCATE_parser___ReduceAction272___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -28674,80 +30241,80 @@ void parser___ReduceAction255___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:8539 */
+  /* ./parser//parser.nit:9006 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8540 */
+  /* ./parser//parser.nit:9007 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8541 */
+  /* ./parser//parser.nit:9008 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8542 */
+  /* ./parser//parser.nit:9009 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8544 */
+  /* ./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, 8544);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9011);
   }
-  /* ./parser//parser.nit:8546 */
+  /* ./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, 8546);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9013);
   }
-  /* ./parser//parser.nit:8548 */
+  /* ./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, 8548);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9015);
   }
-  /* ./parser//parser.nit:8549 */
+  /* ./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:8556 */
+  /* ./parser//parser.nit:9023 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8557 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction255____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8557);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9024);
   }
-  REGB0 = ATTR_parser___ReduceAction255____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction272____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction255___init(val_t p0, val_t p1, int* init_table){
-  int itpos249 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction255].i;
+void parser___ReduceAction272___init(val_t p0, val_t p1, int* init_table){
+  int itpos265 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction272].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos249]) return;
+  if (init_table[itpos265]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8560;
-  fra.me.meth = LOCATE_parser___ReduceAction255___init;
+  fra.me.line = 9027;
+  fra.me.meth = LOCATE_parser___ReduceAction272___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8560 */
+  /* ./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___ReduceAction255____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction272____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos249] = 1;
+  init_table[itpos265] = 1;
   return;
 }
-void parser___ReduceAction256___action(val_t p0, val_t p1){
+void parser___ReduceAction273___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8564;
-  fra.me.meth = LOCATE_parser___ReduceAction256___action;
+  fra.me.line = 9031;
+  fra.me.meth = LOCATE_parser___ReduceAction273___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -28759,90 +30326,90 @@ void parser___ReduceAction256___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:8566 */
+  /* ./parser//parser.nit:9033 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8567 */
+  /* ./parser//parser.nit:9034 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8568 */
+  /* ./parser//parser.nit:9035 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8569 */
+  /* ./parser//parser.nit:9036 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8570 */
+  /* ./parser//parser.nit:9037 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8571 */
+  /* ./parser//parser.nit:9038 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8573 */
+  /* ./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, 8573);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9040);
   }
-  /* ./parser//parser.nit:8575 */
+  /* ./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, 8575);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9042);
   }
-  /* ./parser//parser.nit:8577 */
+  /* ./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, 8577);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9044);
   }
-  /* ./parser//parser.nit:8579 */
+  /* ./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, 8579);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9046);
   }
-  /* ./parser//parser.nit:8580 */
+  /* ./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:8587 */
+  /* ./parser//parser.nit:9054 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8588 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction256____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8588);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9055);
   }
-  REGB0 = ATTR_parser___ReduceAction256____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction273____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction256___init(val_t p0, val_t p1, int* init_table){
-  int itpos250 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction256].i;
+void parser___ReduceAction273___init(val_t p0, val_t p1, int* init_table){
+  int itpos266 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction273].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos250]) return;
+  if (init_table[itpos266]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8591;
-  fra.me.meth = LOCATE_parser___ReduceAction256___init;
+  fra.me.line = 9058;
+  fra.me.meth = LOCATE_parser___ReduceAction273___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8591 */
+  /* ./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___ReduceAction256____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction273____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos250] = 1;
+  init_table[itpos266] = 1;
   return;
 }
-void parser___ReduceAction257___action(val_t p0, val_t p1){
+void parser___ReduceAction274___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8595;
-  fra.me.meth = LOCATE_parser___ReduceAction257___action;
+  fra.me.line = 9062;
+  fra.me.meth = LOCATE_parser___ReduceAction274___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -28855,98 +30422,98 @@ void parser___ReduceAction257___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:8597 */
+  /* ./parser//parser.nit:9064 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8598 */
+  /* ./parser//parser.nit:9065 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8599 */
+  /* ./parser//parser.nit:9066 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8600 */
+  /* ./parser//parser.nit:9067 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8601 */
+  /* ./parser//parser.nit:9068 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8602 */
+  /* ./parser//parser.nit:9069 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8603 */
+  /* ./parser//parser.nit:9070 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8605 */
+  /* ./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, 8605);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9072);
   }
-  /* ./parser//parser.nit:8607 */
+  /* ./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, 8607);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9074);
   }
-  /* ./parser//parser.nit:8609 */
+  /* ./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, 8609);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9076);
   }
-  /* ./parser//parser.nit:8611 */
+  /* ./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, 8611);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9078);
   }
-  /* ./parser//parser.nit:8613 */
+  /* ./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, 8613);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9080);
   }
-  /* ./parser//parser.nit:8614 */
+  /* ./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:8621 */
+  /* ./parser//parser.nit:9088 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8622 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction257____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8622);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9089);
   }
-  REGB0 = ATTR_parser___ReduceAction257____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction274____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction257___init(val_t p0, val_t p1, int* init_table){
-  int itpos251 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction257].i;
+void parser___ReduceAction274___init(val_t p0, val_t p1, int* init_table){
+  int itpos267 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction274].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos251]) return;
+  if (init_table[itpos267]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8625;
-  fra.me.meth = LOCATE_parser___ReduceAction257___init;
+  fra.me.line = 9092;
+  fra.me.meth = LOCATE_parser___ReduceAction274___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8625 */
+  /* ./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___ReduceAction257____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction274____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos251] = 1;
+  init_table[itpos267] = 1;
   return;
 }
-void parser___ReduceAction258___action(val_t p0, val_t p1){
+void parser___ReduceAction275___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8629;
-  fra.me.meth = LOCATE_parser___ReduceAction258___action;
+  fra.me.line = 9096;
+  fra.me.meth = LOCATE_parser___ReduceAction275___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -28958,92 +30525,92 @@ void parser___ReduceAction258___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:8631 */
+  /* ./parser//parser.nit:9098 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8632 */
+  /* ./parser//parser.nit:9099 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8633 */
+  /* ./parser//parser.nit:9100 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8634 */
+  /* ./parser//parser.nit:9101 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8635 */
+  /* ./parser//parser.nit:9102 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8636 */
+  /* ./parser//parser.nit:9103 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8637 */
+  /* ./parser//parser.nit:9104 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8639 */
+  /* ./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, 8639);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9106);
   }
-  /* ./parser//parser.nit:8641 */
+  /* ./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, 8641);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9108);
   }
-  /* ./parser//parser.nit:8643 */
+  /* ./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, 8643);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9110);
   }
-  /* ./parser//parser.nit:8645 */
+  /* ./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, 8645);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9112);
   }
-  /* ./parser//parser.nit:8646 */
+  /* ./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:8652 */
+  /* ./parser//parser.nit:9119 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8653 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction258____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8653);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9120);
   }
-  REGB0 = ATTR_parser___ReduceAction258____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction275____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction258___init(val_t p0, val_t p1, int* init_table){
-  int itpos252 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction258].i;
+void parser___ReduceAction275___init(val_t p0, val_t p1, int* init_table){
+  int itpos268 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction275].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos252]) return;
+  if (init_table[itpos268]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8656;
-  fra.me.meth = LOCATE_parser___ReduceAction258___init;
+  fra.me.line = 9123;
+  fra.me.meth = LOCATE_parser___ReduceAction275___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8656 */
+  /* ./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___ReduceAction258____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction275____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos252] = 1;
+  init_table[itpos268] = 1;
   return;
 }
-void parser___ReduceAction259___action(val_t p0, val_t p1){
+void parser___ReduceAction276___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8660;
-  fra.me.meth = LOCATE_parser___ReduceAction259___action;
+  fra.me.line = 9127;
+  fra.me.meth = LOCATE_parser___ReduceAction276___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -29055,82 +30622,82 @@ void parser___ReduceAction259___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:8662 */
+  /* ./parser//parser.nit:9129 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8663 */
+  /* ./parser//parser.nit:9130 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8664 */
+  /* ./parser//parser.nit:9131 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8665 */
+  /* ./parser//parser.nit:9132 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8666 */
+  /* ./parser//parser.nit:9133 */
   fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8669 */
+  /* ./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, 8669);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9136);
   }
-  /* ./parser//parser.nit:8671 */
+  /* ./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, 8671);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9138);
   }
-  /* ./parser//parser.nit:8673 */
+  /* ./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, 8673);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9140);
   }
-  /* ./parser//parser.nit:8674 */
+  /* ./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:8680 */
+  /* ./parser//parser.nit:9147 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8681 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction259____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8681);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9148);
   }
-  REGB0 = ATTR_parser___ReduceAction259____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction276____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction259___init(val_t p0, val_t p1, int* init_table){
-  int itpos253 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction259].i;
+void parser___ReduceAction276___init(val_t p0, val_t p1, int* init_table){
+  int itpos269 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction276].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos253]) return;
+  if (init_table[itpos269]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8684;
-  fra.me.meth = LOCATE_parser___ReduceAction259___init;
+  fra.me.line = 9151;
+  fra.me.meth = LOCATE_parser___ReduceAction276___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8684 */
+  /* ./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___ReduceAction259____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction276____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos253] = 1;
+  init_table[itpos269] = 1;
   return;
 }
-void parser___ReduceAction260___action(val_t p0, val_t p1){
+void parser___ReduceAction277___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8688;
-  fra.me.meth = LOCATE_parser___ReduceAction260___action;
+  fra.me.line = 9155;
+  fra.me.meth = LOCATE_parser___ReduceAction277___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -29144,105 +30711,105 @@ void parser___ReduceAction260___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8690 */
+  /* ./parser//parser.nit:9157 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8691 */
+  /* ./parser//parser.nit:9158 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8692 */
+  /* ./parser//parser.nit:9159 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8693 */
+  /* ./parser//parser.nit:9160 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8694 */
+  /* ./parser//parser.nit:9161 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8695 */
+  /* ./parser//parser.nit:9162 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8696 */
+  /* ./parser//parser.nit:9163 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8697 */
+  /* ./parser//parser.nit:9164 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8698 */
+  /* ./parser//parser.nit:9165 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8700 */
+  /* ./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, 8700);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9167);
   }
-  /* ./parser//parser.nit:8702 */
+  /* ./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, 8702);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9169);
   }
-  /* ./parser//parser.nit:8704 */
+  /* ./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, 8704);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9171);
   }
-  /* ./parser//parser.nit:8705 */
+  /* ./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:8707 */
+  /* ./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, 8707);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9174);
   }
-  /* ./parser//parser.nit:8709 */
+  /* ./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, 8709);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9176);
   }
-  /* ./parser//parser.nit:8710 */
+  /* ./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:8717 */
+  /* ./parser//parser.nit:9184 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8718 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction260____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8718);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9185);
   }
-  REGB0 = ATTR_parser___ReduceAction260____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction277____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction260___init(val_t p0, val_t p1, int* init_table){
-  int itpos254 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction260].i;
+void parser___ReduceAction277___init(val_t p0, val_t p1, int* init_table){
+  int itpos270 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction277].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos254]) return;
+  if (init_table[itpos270]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8721;
-  fra.me.meth = LOCATE_parser___ReduceAction260___init;
+  fra.me.line = 9188;
+  fra.me.meth = LOCATE_parser___ReduceAction277___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8721 */
+  /* ./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___ReduceAction260____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction277____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos254] = 1;
+  init_table[itpos270] = 1;
   return;
 }
-void parser___ReduceAction261___action(val_t p0, val_t p1){
+void parser___ReduceAction278___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8725;
-  fra.me.meth = LOCATE_parser___ReduceAction261___action;
+  fra.me.line = 9192;
+  fra.me.meth = LOCATE_parser___ReduceAction278___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -29256,95 +30823,95 @@ void parser___ReduceAction261___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:8727 */
+  /* ./parser//parser.nit:9194 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8728 */
+  /* ./parser//parser.nit:9195 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8729 */
+  /* ./parser//parser.nit:9196 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8730 */
+  /* ./parser//parser.nit:9197 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8731 */
+  /* ./parser//parser.nit:9198 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8732 */
+  /* ./parser//parser.nit:9199 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8733 */
+  /* ./parser//parser.nit:9200 */
   fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8736 */
+  /* ./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, 8736);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9203);
   }
-  /* ./parser//parser.nit:8738 */
+  /* ./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, 8738);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9205);
   }
-  /* ./parser//parser.nit:8739 */
+  /* ./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:8741 */
+  /* ./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, 8741);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9208);
   }
-  /* ./parser//parser.nit:8743 */
+  /* ./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, 8743);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9210);
   }
-  /* ./parser//parser.nit:8744 */
+  /* ./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:8751 */
+  /* ./parser//parser.nit:9218 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8752 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction261____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8752);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9219);
   }
-  REGB0 = ATTR_parser___ReduceAction261____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction278____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction261___init(val_t p0, val_t p1, int* init_table){
-  int itpos255 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction261].i;
+void parser___ReduceAction278___init(val_t p0, val_t p1, int* init_table){
+  int itpos271 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction278].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos255]) return;
+  if (init_table[itpos271]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8755;
-  fra.me.meth = LOCATE_parser___ReduceAction261___init;
+  fra.me.line = 9222;
+  fra.me.meth = LOCATE_parser___ReduceAction278___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8755 */
+  /* ./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___ReduceAction261____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction278____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos255] = 1;
+  init_table[itpos271] = 1;
   return;
 }
-void parser___ReduceAction262___action(val_t p0, val_t p1){
+void parser___ReduceAction279___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8759;
-  fra.me.meth = LOCATE_parser___ReduceAction262___action;
+  fra.me.line = 9226;
+  fra.me.meth = LOCATE_parser___ReduceAction279___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -29357,93 +30924,93 @@ void parser___ReduceAction262___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8761 */
+  /* ./parser//parser.nit:9228 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8762 */
+  /* ./parser//parser.nit:9229 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8763 */
+  /* ./parser//parser.nit:9230 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8764 */
+  /* ./parser//parser.nit:9231 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8765 */
+  /* ./parser//parser.nit:9232 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8766 */
+  /* ./parser//parser.nit:9233 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8768 */
+  /* ./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, 8768);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9235);
   }
-  /* ./parser//parser.nit:8770 */
+  /* ./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, 8770);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9237);
   }
-  /* ./parser//parser.nit:8771 */
+  /* ./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:8773 */
+  /* ./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, 8773);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9240);
   }
-  /* ./parser//parser.nit:8775 */
+  /* ./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, 8775);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9242);
   }
-  /* ./parser//parser.nit:8776 */
+  /* ./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:8782 */
+  /* ./parser//parser.nit:9249 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8783 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction262____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8783);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9250);
   }
-  REGB0 = ATTR_parser___ReduceAction262____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction279____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction262___init(val_t p0, val_t p1, int* init_table){
-  int itpos256 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction262].i;
+void parser___ReduceAction279___init(val_t p0, val_t p1, int* init_table){
+  int itpos272 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction279].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos256]) return;
+  if (init_table[itpos272]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8786;
-  fra.me.meth = LOCATE_parser___ReduceAction262___init;
+  fra.me.line = 9253;
+  fra.me.meth = LOCATE_parser___ReduceAction279___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8786 */
+  /* ./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___ReduceAction262____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction279____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos256] = 1;
+  init_table[itpos272] = 1;
   return;
 }
-void parser___ReduceAction263___action(val_t p0, val_t p1){
+void parser___ReduceAction280___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8790;
-  fra.me.meth = LOCATE_parser___ReduceAction263___action;
+  fra.me.line = 9257;
+  fra.me.meth = LOCATE_parser___ReduceAction280___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -29455,92 +31022,92 @@ void parser___ReduceAction263___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8792 */
+  /* ./parser//parser.nit:9259 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8793 */
+  /* ./parser//parser.nit:9260 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8794 */
+  /* ./parser//parser.nit:9261 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8795 */
+  /* ./parser//parser.nit:9262 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8796 */
+  /* ./parser//parser.nit:9263 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8797 */
+  /* ./parser//parser.nit:9264 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8798 */
+  /* ./parser//parser.nit:9265 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8800 */
+  /* ./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, 8800);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9267);
   }
-  /* ./parser//parser.nit:8802 */
+  /* ./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, 8802);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9269);
   }
-  /* ./parser//parser.nit:8804 */
+  /* ./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, 8804);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9271);
   }
-  /* ./parser//parser.nit:8806 */
+  /* ./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, 8806);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9273);
   }
-  /* ./parser//parser.nit:8807 */
+  /* ./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:8813 */
+  /* ./parser//parser.nit:9280 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8814 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction263____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8814);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9281);
   }
-  REGB0 = ATTR_parser___ReduceAction263____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction280____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction263___init(val_t p0, val_t p1, int* init_table){
-  int itpos257 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction263].i;
+void parser___ReduceAction280___init(val_t p0, val_t p1, int* init_table){
+  int itpos273 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction280].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos257]) return;
+  if (init_table[itpos273]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8817;
-  fra.me.meth = LOCATE_parser___ReduceAction263___init;
+  fra.me.line = 9284;
+  fra.me.meth = LOCATE_parser___ReduceAction280___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8817 */
+  /* ./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___ReduceAction263____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction280____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos257] = 1;
+  init_table[itpos273] = 1;
   return;
 }
-void parser___ReduceAction264___action(val_t p0, val_t p1){
+void parser___ReduceAction281___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8821;
-  fra.me.meth = LOCATE_parser___ReduceAction264___action;
+  fra.me.line = 9288;
+  fra.me.meth = LOCATE_parser___ReduceAction281___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -29552,82 +31119,82 @@ void parser___ReduceAction264___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8823 */
+  /* ./parser//parser.nit:9290 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8824 */
+  /* ./parser//parser.nit:9291 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8825 */
+  /* ./parser//parser.nit:9292 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8826 */
+  /* ./parser//parser.nit:9293 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8827 */
+  /* ./parser//parser.nit:9294 */
   fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8830 */
+  /* ./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, 8830);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9297);
   }
-  /* ./parser//parser.nit:8832 */
+  /* ./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, 8832);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9299);
   }
-  /* ./parser//parser.nit:8834 */
+  /* ./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, 8834);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9301);
   }
-  /* ./parser//parser.nit:8835 */
+  /* ./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:8841 */
+  /* ./parser//parser.nit:9308 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8842 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction264____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8842);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9309);
   }
-  REGB0 = ATTR_parser___ReduceAction264____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction281____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction264___init(val_t p0, val_t p1, int* init_table){
-  int itpos258 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction264].i;
+void parser___ReduceAction281___init(val_t p0, val_t p1, int* init_table){
+  int itpos274 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction281].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos258]) return;
+  if (init_table[itpos274]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8845;
-  fra.me.meth = LOCATE_parser___ReduceAction264___init;
+  fra.me.line = 9312;
+  fra.me.meth = LOCATE_parser___ReduceAction281___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8845 */
+  /* ./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___ReduceAction264____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction281____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos258] = 1;
+  init_table[itpos274] = 1;
   return;
 }
-void parser___ReduceAction265___action(val_t p0, val_t p1){
+void parser___ReduceAction282___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8849;
-  fra.me.meth = LOCATE_parser___ReduceAction265___action;
+  fra.me.line = 9316;
+  fra.me.meth = LOCATE_parser___ReduceAction282___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -29641,105 +31208,105 @@ void parser___ReduceAction265___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8851 */
+  /* ./parser//parser.nit:9318 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8852 */
+  /* ./parser//parser.nit:9319 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8853 */
+  /* ./parser//parser.nit:9320 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8854 */
+  /* ./parser//parser.nit:9321 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8855 */
+  /* ./parser//parser.nit:9322 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8856 */
+  /* ./parser//parser.nit:9323 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8857 */
+  /* ./parser//parser.nit:9324 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8858 */
+  /* ./parser//parser.nit:9325 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8859 */
+  /* ./parser//parser.nit:9326 */
   fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8861 */
+  /* ./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, 8861);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9328);
   }
-  /* ./parser//parser.nit:8863 */
+  /* ./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, 8863);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9330);
   }
-  /* ./parser//parser.nit:8865 */
+  /* ./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, 8865);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9332);
   }
-  /* ./parser//parser.nit:8866 */
+  /* ./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:8868 */
+  /* ./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, 8868);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9335);
   }
-  /* ./parser//parser.nit:8870 */
+  /* ./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, 8870);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9337);
   }
-  /* ./parser//parser.nit:8871 */
+  /* ./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:8878 */
+  /* ./parser//parser.nit:9345 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8879 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction265____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8879);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9346);
   }
-  REGB0 = ATTR_parser___ReduceAction265____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction282____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction265___init(val_t p0, val_t p1, int* init_table){
-  int itpos259 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction265].i;
+void parser___ReduceAction282___init(val_t p0, val_t p1, int* init_table){
+  int itpos275 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction282].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos259]) return;
+  if (init_table[itpos275]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8882;
-  fra.me.meth = LOCATE_parser___ReduceAction265___init;
+  fra.me.line = 9349;
+  fra.me.meth = LOCATE_parser___ReduceAction282___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8882 */
+  /* ./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___ReduceAction265____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction282____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos259] = 1;
+  init_table[itpos275] = 1;
   return;
 }
-void parser___ReduceAction266___action(val_t p0, val_t p1){
+void parser___ReduceAction283___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8886;
-  fra.me.meth = LOCATE_parser___ReduceAction266___action;
+  fra.me.line = 9353;
+  fra.me.meth = LOCATE_parser___ReduceAction283___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -29753,95 +31320,95 @@ void parser___ReduceAction266___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8888 */
+  /* ./parser//parser.nit:9355 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8889 */
+  /* ./parser//parser.nit:9356 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8890 */
+  /* ./parser//parser.nit:9357 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8891 */
+  /* ./parser//parser.nit:9358 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8892 */
+  /* ./parser//parser.nit:9359 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8893 */
+  /* ./parser//parser.nit:9360 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8894 */
+  /* ./parser//parser.nit:9361 */
   fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8897 */
+  /* ./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, 8897);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9364);
   }
-  /* ./parser//parser.nit:8899 */
+  /* ./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, 8899);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9366);
   }
-  /* ./parser//parser.nit:8900 */
+  /* ./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:8902 */
+  /* ./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, 8902);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9369);
   }
-  /* ./parser//parser.nit:8904 */
+  /* ./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, 8904);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9371);
   }
-  /* ./parser//parser.nit:8905 */
+  /* ./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:8912 */
+  /* ./parser//parser.nit:9379 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8913 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction266____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8913);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9380);
   }
-  REGB0 = ATTR_parser___ReduceAction266____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction283____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction266___init(val_t p0, val_t p1, int* init_table){
-  int itpos260 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction266].i;
+void parser___ReduceAction283___init(val_t p0, val_t p1, int* init_table){
+  int itpos276 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction283].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos260]) return;
+  if (init_table[itpos276]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8916;
-  fra.me.meth = LOCATE_parser___ReduceAction266___init;
+  fra.me.line = 9383;
+  fra.me.meth = LOCATE_parser___ReduceAction283___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8916 */
+  /* ./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___ReduceAction266____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction283____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos260] = 1;
+  init_table[itpos276] = 1;
   return;
 }
-void parser___ReduceAction267___action(val_t p0, val_t p1){
+void parser___ReduceAction284___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8920;
-  fra.me.meth = LOCATE_parser___ReduceAction267___action;
+  fra.me.line = 9387;
+  fra.me.meth = LOCATE_parser___ReduceAction284___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -29854,93 +31421,93 @@ void parser___ReduceAction267___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8922 */
+  /* ./parser//parser.nit:9389 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8923 */
+  /* ./parser//parser.nit:9390 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8924 */
+  /* ./parser//parser.nit:9391 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8925 */
+  /* ./parser//parser.nit:9392 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8926 */
+  /* ./parser//parser.nit:9393 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8927 */
+  /* ./parser//parser.nit:9394 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8929 */
+  /* ./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, 8929);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9396);
   }
-  /* ./parser//parser.nit:8931 */
+  /* ./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, 8931);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9398);
   }
-  /* ./parser//parser.nit:8932 */
+  /* ./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:8934 */
+  /* ./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, 8934);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9401);
   }
-  /* ./parser//parser.nit:8936 */
+  /* ./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, 8936);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9403);
   }
-  /* ./parser//parser.nit:8937 */
+  /* ./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:8943 */
+  /* ./parser//parser.nit:9410 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8944 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction267____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8944);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9411);
   }
-  REGB0 = ATTR_parser___ReduceAction267____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction284____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction267___init(val_t p0, val_t p1, int* init_table){
-  int itpos261 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction267].i;
+void parser___ReduceAction284___init(val_t p0, val_t p1, int* init_table){
+  int itpos277 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction284].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos261]) return;
+  if (init_table[itpos277]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8947;
-  fra.me.meth = LOCATE_parser___ReduceAction267___init;
+  fra.me.line = 9414;
+  fra.me.meth = LOCATE_parser___ReduceAction284___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8947 */
+  /* ./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___ReduceAction267____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction284____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos261] = 1;
+  init_table[itpos277] = 1;
   return;
 }
-void parser___ReduceAction268___action(val_t p0, val_t p1){
+void parser___ReduceAction285___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8951;
-  fra.me.meth = LOCATE_parser___ReduceAction268___action;
+  fra.me.line = 9418;
+  fra.me.meth = LOCATE_parser___ReduceAction285___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -29949,64 +31516,64 @@ 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:8953 */
+  /* ./parser//parser.nit:9420 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8954 */
+  /* ./parser//parser.nit:9421 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8956 */
+  /* ./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, 8956);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9423);
   }
-  /* ./parser//parser.nit:8957 */
+  /* ./parser//parser.nit:9424 */
   fra.me.REG[3] = NEW_APlusAssignOp_parser_prod___APlusAssignOp___init_aplusassignop(fra.me.REG[3]);
-  /* ./parser//parser.nit:8960 */
+  /* ./parser//parser.nit:9427 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8961 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction268____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8961);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9428);
   }
-  REGB0 = ATTR_parser___ReduceAction268____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction285____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction268___init(val_t p0, val_t p1, int* init_table){
-  int itpos262 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction268].i;
+void parser___ReduceAction285___init(val_t p0, val_t p1, int* init_table){
+  int itpos278 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction285].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos262]) return;
+  if (init_table[itpos278]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8964;
-  fra.me.meth = LOCATE_parser___ReduceAction268___init;
+  fra.me.line = 9431;
+  fra.me.meth = LOCATE_parser___ReduceAction285___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8964 */
+  /* ./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___ReduceAction268____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction285____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos262] = 1;
+  init_table[itpos278] = 1;
   return;
 }
-void parser___ReduceAction269___action(val_t p0, val_t p1){
+void parser___ReduceAction286___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8968;
-  fra.me.meth = LOCATE_parser___ReduceAction269___action;
+  fra.me.line = 9435;
+  fra.me.meth = LOCATE_parser___ReduceAction286___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -30015,64 +31582,64 @@ 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:8970 */
+  /* ./parser//parser.nit:9437 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8971 */
+  /* ./parser//parser.nit:9438 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8973 */
+  /* ./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, 8973);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9440);
   }
-  /* ./parser//parser.nit:8974 */
+  /* ./parser//parser.nit:9441 */
   fra.me.REG[3] = NEW_AMinusAssignOp_parser_prod___AMinusAssignOp___init_aminusassignop(fra.me.REG[3]);
-  /* ./parser//parser.nit:8977 */
+  /* ./parser//parser.nit:9444 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8978 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction269____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 8978);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9445);
   }
-  REGB0 = ATTR_parser___ReduceAction269____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction286____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction269___init(val_t p0, val_t p1, int* init_table){
-  int itpos263 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction269].i;
+void parser___ReduceAction286___init(val_t p0, val_t p1, int* init_table){
+  int itpos279 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction286].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos263]) return;
+  if (init_table[itpos279]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8981;
-  fra.me.meth = LOCATE_parser___ReduceAction269___init;
+  fra.me.line = 9448;
+  fra.me.meth = LOCATE_parser___ReduceAction286___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:8981 */
+  /* ./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___ReduceAction269____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction286____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos263] = 1;
+  init_table[itpos279] = 1;
   return;
 }
-void parser___ReduceAction270___action(val_t p0, val_t p1){
+void parser___ReduceAction287___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8985;
-  fra.me.meth = LOCATE_parser___ReduceAction270___action;
+  fra.me.line = 9452;
+  fra.me.meth = LOCATE_parser___ReduceAction287___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -30083,80 +31650,80 @@ void parser___ReduceAction270___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:8987 */
+  /* ./parser//parser.nit:9454 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8988 */
+  /* ./parser//parser.nit:9455 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8989 */
+  /* ./parser//parser.nit:9456 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8990 */
+  /* ./parser//parser.nit:9457 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8992 */
+  /* ./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, 8992);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9459);
   }
-  /* ./parser//parser.nit:8994 */
+  /* ./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, 8994);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9461);
   }
-  /* ./parser//parser.nit:8996 */
+  /* ./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, 8996);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9463);
   }
-  /* ./parser//parser.nit:8997 */
+  /* ./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:9002 */
+  /* ./parser//parser.nit:9469 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9003 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction270____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9003);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9470);
   }
-  REGB0 = ATTR_parser___ReduceAction270____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction287____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction270___init(val_t p0, val_t p1, int* init_table){
-  int itpos264 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction270].i;
+void parser___ReduceAction287___init(val_t p0, val_t p1, int* init_table){
+  int itpos280 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction287].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos264]) return;
+  if (init_table[itpos280]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9006;
-  fra.me.meth = LOCATE_parser___ReduceAction270___init;
+  fra.me.line = 9473;
+  fra.me.meth = LOCATE_parser___ReduceAction287___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9006 */
+  /* ./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___ReduceAction270____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction287____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos264] = 1;
+  init_table[itpos280] = 1;
   return;
 }
-void parser___ReduceAction271___action(val_t p0, val_t p1){
+void parser___ReduceAction288___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9010;
-  fra.me.meth = LOCATE_parser___ReduceAction271___action;
+  fra.me.line = 9477;
+  fra.me.meth = LOCATE_parser___ReduceAction288___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -30166,72 +31733,72 @@ void parser___ReduceAction271___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:9012 */
+  /* ./parser//parser.nit:9479 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9013 */
+  /* ./parser//parser.nit:9480 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9014 */
+  /* ./parser//parser.nit:9481 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9016 */
+  /* ./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, 9016);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9483);
   }
-  /* ./parser//parser.nit:9018 */
+  /* ./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, 9018);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9485);
   }
-  /* ./parser//parser.nit:9019 */
+  /* ./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:9024 */
+  /* ./parser//parser.nit:9491 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9025 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction271____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9025);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9492);
   }
-  REGB0 = ATTR_parser___ReduceAction271____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction288____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction271___init(val_t p0, val_t p1, int* init_table){
-  int itpos265 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction271].i;
+void parser___ReduceAction288___init(val_t p0, val_t p1, int* init_table){
+  int itpos281 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction288].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos265]) return;
+  if (init_table[itpos281]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9028;
-  fra.me.meth = LOCATE_parser___ReduceAction271___init;
+  fra.me.line = 9495;
+  fra.me.meth = LOCATE_parser___ReduceAction288___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9028 */
+  /* ./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___ReduceAction271____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction288____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos265] = 1;
+  init_table[itpos281] = 1;
   return;
 }
-void parser___ReduceAction272___action(val_t p0, val_t p1){
+void parser___ReduceAction289___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9032;
-  fra.me.meth = LOCATE_parser___ReduceAction272___action;
+  fra.me.line = 9499;
+  fra.me.meth = LOCATE_parser___ReduceAction289___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -30243,96 +31810,96 @@ void parser___ReduceAction272___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9034 */
+  /* ./parser//parser.nit:9501 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9035 */
+  /* ./parser//parser.nit:9502 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9036 */
+  /* ./parser//parser.nit:9503 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9037 */
+  /* ./parser//parser.nit:9504 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9038 */
+  /* ./parser//parser.nit:9505 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9039 */
+  /* ./parser//parser.nit:9506 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9040 */
+  /* ./parser//parser.nit:9507 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9041 */
+  /* ./parser//parser.nit:9508 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9042 */
+  /* ./parser//parser.nit:9509 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9044 */
+  /* ./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, 9044);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9511);
   }
-  /* ./parser//parser.nit:9046 */
+  /* ./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, 9046);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9513);
   }
-  /* ./parser//parser.nit:9048 */
+  /* ./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, 9048);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9515);
   }
-  /* ./parser//parser.nit:9050 */
+  /* ./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, 9050);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9517);
   }
-  /* ./parser//parser.nit:9051 */
+  /* ./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:9057 */
+  /* ./parser//parser.nit:9524 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9058 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction272____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9058);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9525);
   }
-  REGB0 = ATTR_parser___ReduceAction272____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction289____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction272___init(val_t p0, val_t p1, int* init_table){
-  int itpos266 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction272].i;
+void parser___ReduceAction289___init(val_t p0, val_t p1, int* init_table){
+  int itpos282 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction289].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos266]) return;
+  if (init_table[itpos282]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9061;
-  fra.me.meth = LOCATE_parser___ReduceAction272___init;
+  fra.me.line = 9528;
+  fra.me.meth = LOCATE_parser___ReduceAction289___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9061 */
+  /* ./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___ReduceAction272____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction289____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos266] = 1;
+  init_table[itpos282] = 1;
   return;
 }
-void parser___ReduceAction273___action(val_t p0, val_t p1){
+void parser___ReduceAction290___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9065;
-  fra.me.meth = LOCATE_parser___ReduceAction273___action;
+  fra.me.line = 9532;
+  fra.me.meth = LOCATE_parser___ReduceAction290___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -30343,86 +31910,86 @@ void parser___ReduceAction273___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:9067 */
+  /* ./parser//parser.nit:9534 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9068 */
+  /* ./parser//parser.nit:9535 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9069 */
+  /* ./parser//parser.nit:9536 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9070 */
+  /* ./parser//parser.nit:9537 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9071 */
+  /* ./parser//parser.nit:9538 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9072 */
+  /* ./parser//parser.nit:9539 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9073 */
+  /* ./parser//parser.nit:9540 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9075 */
+  /* ./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, 9075);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9542);
   }
-  /* ./parser//parser.nit:9077 */
+  /* ./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, 9077);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9544);
   }
-  /* ./parser//parser.nit:9079 */
+  /* ./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, 9079);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9546);
   }
-  /* ./parser//parser.nit:9080 */
+  /* ./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:9086 */
+  /* ./parser//parser.nit:9553 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9087 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction273____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9087);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9554);
   }
-  REGB0 = ATTR_parser___ReduceAction273____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction290____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction273___init(val_t p0, val_t p1, int* init_table){
-  int itpos267 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction273].i;
+void parser___ReduceAction290___init(val_t p0, val_t p1, int* init_table){
+  int itpos283 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction290].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos267]) return;
+  if (init_table[itpos283]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9090;
-  fra.me.meth = LOCATE_parser___ReduceAction273___init;
+  fra.me.line = 9557;
+  fra.me.meth = LOCATE_parser___ReduceAction290___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9090 */
+  /* ./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___ReduceAction273____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction290____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos267] = 1;
+  init_table[itpos283] = 1;
   return;
 }
-void parser___ReduceAction274___action(val_t p0, val_t p1){
+void parser___ReduceAction291___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9094;
-  fra.me.meth = LOCATE_parser___ReduceAction274___action;
+  fra.me.line = 9561;
+  fra.me.meth = LOCATE_parser___ReduceAction291___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -30434,96 +32001,96 @@ void parser___ReduceAction274___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9096 */
+  /* ./parser//parser.nit:9563 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9097 */
+  /* ./parser//parser.nit:9564 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9098 */
+  /* ./parser//parser.nit:9565 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9099 */
+  /* ./parser//parser.nit:9566 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9100 */
+  /* ./parser//parser.nit:9567 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9101 */
+  /* ./parser//parser.nit:9568 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9102 */
+  /* ./parser//parser.nit:9569 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9103 */
+  /* ./parser//parser.nit:9570 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9104 */
+  /* ./parser//parser.nit:9571 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9106 */
+  /* ./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, 9106);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9573);
   }
-  /* ./parser//parser.nit:9108 */
+  /* ./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, 9108);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9575);
   }
-  /* ./parser//parser.nit:9110 */
+  /* ./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, 9110);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9577);
   }
-  /* ./parser//parser.nit:9112 */
+  /* ./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, 9112);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9579);
   }
-  /* ./parser//parser.nit:9113 */
+  /* ./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:9119 */
+  /* ./parser//parser.nit:9586 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9120 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction274____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9120);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9587);
   }
-  REGB0 = ATTR_parser___ReduceAction274____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction291____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction274___init(val_t p0, val_t p1, int* init_table){
-  int itpos268 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction274].i;
+void parser___ReduceAction291___init(val_t p0, val_t p1, int* init_table){
+  int itpos284 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction291].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos268]) return;
+  if (init_table[itpos284]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9123;
-  fra.me.meth = LOCATE_parser___ReduceAction274___init;
+  fra.me.line = 9590;
+  fra.me.meth = LOCATE_parser___ReduceAction291___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9123 */
+  /* ./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___ReduceAction274____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction291____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos268] = 1;
+  init_table[itpos284] = 1;
   return;
 }
-void parser___ReduceAction275___action(val_t p0, val_t p1){
+void parser___ReduceAction292___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9127;
-  fra.me.meth = LOCATE_parser___ReduceAction275___action;
+  fra.me.line = 9594;
+  fra.me.meth = LOCATE_parser___ReduceAction292___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -30534,86 +32101,86 @@ void parser___ReduceAction275___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9129 */
+  /* ./parser//parser.nit:9596 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9130 */
+  /* ./parser//parser.nit:9597 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9131 */
+  /* ./parser//parser.nit:9598 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9132 */
+  /* ./parser//parser.nit:9599 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9133 */
+  /* ./parser//parser.nit:9600 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9134 */
+  /* ./parser//parser.nit:9601 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9135 */
+  /* ./parser//parser.nit:9602 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9137 */
+  /* ./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, 9137);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9604);
   }
-  /* ./parser//parser.nit:9139 */
+  /* ./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, 9139);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9606);
   }
-  /* ./parser//parser.nit:9141 */
+  /* ./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, 9141);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9608);
   }
-  /* ./parser//parser.nit:9142 */
+  /* ./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:9148 */
+  /* ./parser//parser.nit:9615 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9149 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction275____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9149);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9616);
   }
-  REGB0 = ATTR_parser___ReduceAction275____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction292____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction275___init(val_t p0, val_t p1, int* init_table){
-  int itpos269 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction275].i;
+void parser___ReduceAction292___init(val_t p0, val_t p1, int* init_table){
+  int itpos285 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction292].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos269]) return;
+  if (init_table[itpos285]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9152;
-  fra.me.meth = LOCATE_parser___ReduceAction275___init;
+  fra.me.line = 9619;
+  fra.me.meth = LOCATE_parser___ReduceAction292___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9152 */
+  /* ./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___ReduceAction275____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction292____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos269] = 1;
+  init_table[itpos285] = 1;
   return;
 }
-void parser___ReduceAction276___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 = 9156;
-  fra.me.meth = LOCATE_parser___ReduceAction276___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;
@@ -30624,88 +32191,88 @@ void parser___ReduceAction276___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:9158 */
+  /* ./parser//parser.nit:9625 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9159 */
+  /* ./parser//parser.nit:9626 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9160 */
+  /* ./parser//parser.nit:9627 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9161 */
+  /* ./parser//parser.nit:9628 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9162 */
+  /* ./parser//parser.nit:9629 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9163 */
+  /* ./parser//parser.nit:9630 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9164 */
+  /* ./parser//parser.nit:9631 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9165 */
+  /* ./parser//parser.nit:9632 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9167 */
+  /* ./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, 9167);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9634);
   }
-  /* ./parser//parser.nit:9169 */
+  /* ./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, 9169);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9636);
   }
-  /* ./parser//parser.nit:9171 */
+  /* ./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, 9171);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9638);
   }
-  /* ./parser//parser.nit:9172 */
+  /* ./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:9178 */
+  /* ./parser//parser.nit:9645 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9179 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction276____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, 9179);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9646);
   }
-  REGB0 = ATTR_parser___ReduceAction276____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___ReduceAction276___init(val_t p0, val_t p1, int* init_table){
-  int itpos270 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction276].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[itpos270]) return;
+  if (init_table[itpos286]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9182;
-  fra.me.meth = LOCATE_parser___ReduceAction276___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:9182 */
+  /* ./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___ReduceAction276____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction293____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos270] = 1;
+  init_table[itpos286] = 1;
   return;
 }
-void parser___ReduceAction279___action(val_t p0, val_t p1){
+void parser___ReduceAction296___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9186;
-  fra.me.meth = LOCATE_parser___ReduceAction279___action;
+  fra.me.line = 9653;
+  fra.me.meth = LOCATE_parser___ReduceAction296___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -30716,80 +32283,80 @@ void parser___ReduceAction279___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:9188 */
+  /* ./parser//parser.nit:9655 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9189 */
+  /* ./parser//parser.nit:9656 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9190 */
+  /* ./parser//parser.nit:9657 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9191 */
+  /* ./parser//parser.nit:9658 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9193 */
+  /* ./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, 9193);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9660);
   }
-  /* ./parser//parser.nit:9195 */
+  /* ./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, 9195);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9662);
   }
-  /* ./parser//parser.nit:9197 */
+  /* ./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, 9197);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9664);
   }
-  /* ./parser//parser.nit:9198 */
+  /* ./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:9203 */
+  /* ./parser//parser.nit:9670 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9204 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction279____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9204);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9671);
   }
-  REGB0 = ATTR_parser___ReduceAction279____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction296____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction279___init(val_t p0, val_t p1, int* init_table){
-  int itpos271 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction279].i;
+void parser___ReduceAction296___init(val_t p0, val_t p1, int* init_table){
+  int itpos287 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction296].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos271]) return;
+  if (init_table[itpos287]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9207;
-  fra.me.meth = LOCATE_parser___ReduceAction279___init;
+  fra.me.line = 9674;
+  fra.me.meth = LOCATE_parser___ReduceAction296___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9207 */
+  /* ./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___ReduceAction279____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction296____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos271] = 1;
+  init_table[itpos287] = 1;
   return;
 }
-void parser___ReduceAction280___action(val_t p0, val_t p1){
+void parser___ReduceAction297___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9211;
-  fra.me.meth = LOCATE_parser___ReduceAction280___action;
+  fra.me.line = 9678;
+  fra.me.meth = LOCATE_parser___ReduceAction297___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -30799,72 +32366,72 @@ void parser___ReduceAction280___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:9213 */
+  /* ./parser//parser.nit:9680 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9214 */
+  /* ./parser//parser.nit:9681 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9215 */
+  /* ./parser//parser.nit:9682 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9217 */
+  /* ./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, 9217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9684);
   }
-  /* ./parser//parser.nit:9219 */
+  /* ./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, 9219);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9686);
   }
-  /* ./parser//parser.nit:9220 */
+  /* ./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:9225 */
+  /* ./parser//parser.nit:9692 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9226 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction280____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9226);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9693);
   }
-  REGB0 = ATTR_parser___ReduceAction280____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction297____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction280___init(val_t p0, val_t p1, int* init_table){
-  int itpos272 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction280].i;
+void parser___ReduceAction297___init(val_t p0, val_t p1, int* init_table){
+  int itpos288 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction297].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos272]) return;
+  if (init_table[itpos288]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9229;
-  fra.me.meth = LOCATE_parser___ReduceAction280___init;
+  fra.me.line = 9696;
+  fra.me.meth = LOCATE_parser___ReduceAction297___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9229 */
+  /* ./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___ReduceAction280____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction297____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos272] = 1;
+  init_table[itpos288] = 1;
   return;
 }
-void parser___ReduceAction281___action(val_t p0, val_t p1){
+void parser___ReduceAction298___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9233;
-  fra.me.meth = LOCATE_parser___ReduceAction281___action;
+  fra.me.line = 9700;
+  fra.me.meth = LOCATE_parser___ReduceAction298___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -30877,100 +32444,100 @@ void parser___ReduceAction281___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:9235 */
+  /* ./parser//parser.nit:9702 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9236 */
+  /* ./parser//parser.nit:9703 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9237 */
+  /* ./parser//parser.nit:9704 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9238 */
+  /* ./parser//parser.nit:9705 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9239 */
+  /* ./parser//parser.nit:9706 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9240 */
+  /* ./parser//parser.nit:9707 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9241 */
+  /* ./parser//parser.nit:9708 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9242 */
+  /* ./parser//parser.nit:9709 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9244 */
+  /* ./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, 9244);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9711);
   }
-  /* ./parser//parser.nit:9246 */
+  /* ./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, 9246);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9713);
   }
-  /* ./parser//parser.nit:9248 */
+  /* ./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, 9248);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9715);
   }
-  /* ./parser//parser.nit:9250 */
+  /* ./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, 9250);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9717);
   }
-  /* ./parser//parser.nit:9252 */
+  /* ./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, 9252);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9719);
   }
-  /* ./parser//parser.nit:9253 */
+  /* ./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:9260 */
+  /* ./parser//parser.nit:9727 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9261 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction281____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9261);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9728);
   }
-  REGB0 = ATTR_parser___ReduceAction281____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction298____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction281___init(val_t p0, val_t p1, int* init_table){
-  int itpos273 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction281].i;
+void parser___ReduceAction298___init(val_t p0, val_t p1, int* init_table){
+  int itpos289 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction298].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos273]) return;
+  if (init_table[itpos289]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9264;
-  fra.me.meth = LOCATE_parser___ReduceAction281___init;
+  fra.me.line = 9731;
+  fra.me.meth = LOCATE_parser___ReduceAction298___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9264 */
+  /* ./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___ReduceAction281____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction298____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos273] = 1;
+  init_table[itpos289] = 1;
   return;
 }
-void parser___ReduceAction282___action(val_t p0, val_t p1){
+void parser___ReduceAction299___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9268;
-  fra.me.meth = LOCATE_parser___ReduceAction282___action;
+  fra.me.line = 9735;
+  fra.me.meth = LOCATE_parser___ReduceAction299___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -30982,92 +32549,92 @@ void parser___ReduceAction282___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:9270 */
+  /* ./parser//parser.nit:9737 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9271 */
+  /* ./parser//parser.nit:9738 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9272 */
+  /* ./parser//parser.nit:9739 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9273 */
+  /* ./parser//parser.nit:9740 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9274 */
+  /* ./parser//parser.nit:9741 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9275 */
+  /* ./parser//parser.nit:9742 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9276 */
+  /* ./parser//parser.nit:9743 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9278 */
+  /* ./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, 9278);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9745);
   }
-  /* ./parser//parser.nit:9280 */
+  /* ./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, 9280);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9747);
   }
-  /* ./parser//parser.nit:9282 */
+  /* ./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, 9282);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9749);
   }
-  /* ./parser//parser.nit:9284 */
+  /* ./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, 9284);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9751);
   }
-  /* ./parser//parser.nit:9285 */
+  /* ./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:9292 */
+  /* ./parser//parser.nit:9759 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9293 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction282____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9293);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9760);
   }
-  REGB0 = ATTR_parser___ReduceAction282____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction299____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction282___init(val_t p0, val_t p1, int* init_table){
-  int itpos274 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction282].i;
+void parser___ReduceAction299___init(val_t p0, val_t p1, int* init_table){
+  int itpos290 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction299].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos274]) return;
+  if (init_table[itpos290]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9296;
-  fra.me.meth = LOCATE_parser___ReduceAction282___init;
+  fra.me.line = 9763;
+  fra.me.meth = LOCATE_parser___ReduceAction299___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9296 */
+  /* ./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___ReduceAction282____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction299____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos274] = 1;
+  init_table[itpos290] = 1;
   return;
 }
-void parser___ReduceAction283___action(val_t p0, val_t p1){
+void parser___ReduceAction300___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9300;
-  fra.me.meth = LOCATE_parser___ReduceAction283___action;
+  fra.me.line = 9767;
+  fra.me.meth = LOCATE_parser___ReduceAction300___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -31081,114 +32648,114 @@ void parser___ReduceAction283___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:9302 */
+  /* ./parser//parser.nit:9769 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9303 */
+  /* ./parser//parser.nit:9770 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9304 */
+  /* ./parser//parser.nit:9771 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9305 */
+  /* ./parser//parser.nit:9772 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9306 */
+  /* ./parser//parser.nit:9773 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9307 */
+  /* ./parser//parser.nit:9774 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9308 */
+  /* ./parser//parser.nit:9775 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9309 */
+  /* ./parser//parser.nit:9776 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9310 */
+  /* ./parser//parser.nit:9777 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9311 */
+  /* ./parser//parser.nit:9778 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9312 */
+  /* ./parser//parser.nit:9779 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9313 */
+  /* ./parser//parser.nit:9780 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9315 */
+  /* ./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, 9315);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9782);
   }
-  /* ./parser//parser.nit:9317 */
+  /* ./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, 9317);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9784);
   }
-  /* ./parser//parser.nit:9319 */
+  /* ./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, 9319);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9786);
   }
-  /* ./parser//parser.nit:9321 */
+  /* ./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, 9321);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9788);
   }
-  /* ./parser//parser.nit:9323 */
+  /* ./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, 9323);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9790);
   }
-  /* ./parser//parser.nit:9325 */
+  /* ./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, 9325);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9792);
   }
-  /* ./parser//parser.nit:9326 */
+  /* ./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:9334 */
+  /* ./parser//parser.nit:9801 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9335 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction283____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9335);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9802);
   }
-  REGB0 = ATTR_parser___ReduceAction283____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction300____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction283___init(val_t p0, val_t p1, int* init_table){
-  int itpos275 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction283].i;
+void parser___ReduceAction300___init(val_t p0, val_t p1, int* init_table){
+  int itpos291 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction300].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos275]) return;
+  if (init_table[itpos291]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9338;
-  fra.me.meth = LOCATE_parser___ReduceAction283___init;
+  fra.me.line = 9805;
+  fra.me.meth = LOCATE_parser___ReduceAction300___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9338 */
+  /* ./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___ReduceAction283____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction300____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos275] = 1;
+  init_table[itpos291] = 1;
   return;
 }
-void parser___ReduceAction284___action(val_t p0, val_t p1){
+void parser___ReduceAction301___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9342;
-  fra.me.meth = LOCATE_parser___ReduceAction284___action;
+  fra.me.line = 9809;
+  fra.me.meth = LOCATE_parser___ReduceAction301___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -31201,106 +32768,106 @@ void parser___ReduceAction284___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:9344 */
+  /* ./parser//parser.nit:9811 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9345 */
+  /* ./parser//parser.nit:9812 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9346 */
+  /* ./parser//parser.nit:9813 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9347 */
+  /* ./parser//parser.nit:9814 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9348 */
+  /* ./parser//parser.nit:9815 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9349 */
+  /* ./parser//parser.nit:9816 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9350 */
+  /* ./parser//parser.nit:9817 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9351 */
+  /* ./parser//parser.nit:9818 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9352 */
+  /* ./parser//parser.nit:9819 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9353 */
+  /* ./parser//parser.nit:9820 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9354 */
+  /* ./parser//parser.nit:9821 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9356 */
+  /* ./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, 9356);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9823);
   }
-  /* ./parser//parser.nit:9358 */
+  /* ./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, 9358);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9825);
   }
-  /* ./parser//parser.nit:9360 */
+  /* ./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, 9360);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9827);
   }
-  /* ./parser//parser.nit:9362 */
+  /* ./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, 9362);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9829);
   }
-  /* ./parser//parser.nit:9364 */
+  /* ./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, 9364);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9831);
   }
-  /* ./parser//parser.nit:9365 */
+  /* ./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:9373 */
+  /* ./parser//parser.nit:9840 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9374 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction284____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9374);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9841);
   }
-  REGB0 = ATTR_parser___ReduceAction284____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction301____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction284___init(val_t p0, val_t p1, int* init_table){
-  int itpos276 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction284].i;
+void parser___ReduceAction301___init(val_t p0, val_t p1, int* init_table){
+  int itpos292 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction301].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos276]) return;
+  if (init_table[itpos292]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9377;
-  fra.me.meth = LOCATE_parser___ReduceAction284___init;
+  fra.me.line = 9844;
+  fra.me.meth = LOCATE_parser___ReduceAction301___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9377 */
+  /* ./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___ReduceAction284____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction301____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos276] = 1;
+  init_table[itpos292] = 1;
   return;
 }
-void parser___ReduceAction285___action(val_t p0, val_t p1){
+void parser___ReduceAction302___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9381;
-  fra.me.meth = LOCATE_parser___ReduceAction285___action;
+  fra.me.line = 9848;
+  fra.me.meth = LOCATE_parser___ReduceAction302___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -31311,82 +32878,82 @@ void parser___ReduceAction285___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:9383 */
+  /* ./parser//parser.nit:9850 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9384 */
+  /* ./parser//parser.nit:9851 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9385 */
+  /* ./parser//parser.nit:9852 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9386 */
+  /* ./parser//parser.nit:9853 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9387 */
+  /* ./parser//parser.nit:9854 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9389 */
+  /* ./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, 9389);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9856);
   }
-  /* ./parser//parser.nit:9391 */
+  /* ./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, 9391);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9858);
   }
-  /* ./parser//parser.nit:9393 */
+  /* ./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, 9393);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9860);
   }
-  /* ./parser//parser.nit:9394 */
+  /* ./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:9400 */
+  /* ./parser//parser.nit:9867 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9401 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction285____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9401);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9868);
   }
-  REGB0 = ATTR_parser___ReduceAction285____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction302____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction285___init(val_t p0, val_t p1, int* init_table){
-  int itpos277 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction285].i;
+void parser___ReduceAction302___init(val_t p0, val_t p1, int* init_table){
+  int itpos293 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction302].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos277]) return;
+  if (init_table[itpos293]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9404;
-  fra.me.meth = LOCATE_parser___ReduceAction285___init;
+  fra.me.line = 9871;
+  fra.me.meth = LOCATE_parser___ReduceAction302___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9404 */
+  /* ./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___ReduceAction285____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction302____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos277] = 1;
+  init_table[itpos293] = 1;
   return;
 }
-void parser___ReduceAction286___action(val_t p0, val_t p1){
+void parser___ReduceAction303___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9408;
-  fra.me.meth = LOCATE_parser___ReduceAction286___action;
+  fra.me.line = 9875;
+  fra.me.meth = LOCATE_parser___ReduceAction303___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -31398,90 +32965,90 @@ void parser___ReduceAction286___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:9410 */
+  /* ./parser//parser.nit:9877 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9411 */
+  /* ./parser//parser.nit:9878 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9412 */
+  /* ./parser//parser.nit:9879 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9413 */
+  /* ./parser//parser.nit:9880 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9414 */
+  /* ./parser//parser.nit:9881 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9415 */
+  /* ./parser//parser.nit:9882 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9417 */
+  /* ./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, 9417);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9884);
   }
-  /* ./parser//parser.nit:9419 */
+  /* ./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, 9419);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9886);
   }
-  /* ./parser//parser.nit:9421 */
+  /* ./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, 9421);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9888);
   }
-  /* ./parser//parser.nit:9423 */
+  /* ./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, 9423);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9890);
   }
-  /* ./parser//parser.nit:9424 */
+  /* ./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:9430 */
+  /* ./parser//parser.nit:9897 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9431 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction286____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9431);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9898);
   }
-  REGB0 = ATTR_parser___ReduceAction286____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction303____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction286___init(val_t p0, val_t p1, int* init_table){
-  int itpos278 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction286].i;
+void parser___ReduceAction303___init(val_t p0, val_t p1, int* init_table){
+  int itpos294 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction303].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos278]) return;
+  if (init_table[itpos294]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9434;
-  fra.me.meth = LOCATE_parser___ReduceAction286___init;
+  fra.me.line = 9901;
+  fra.me.meth = LOCATE_parser___ReduceAction303___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9434 */
+  /* ./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___ReduceAction286____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction303____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos278] = 1;
+  init_table[itpos294] = 1;
   return;
 }
-void parser___ReduceAction287___action(val_t p0, val_t p1){
+void parser___ReduceAction304___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9438;
-  fra.me.meth = LOCATE_parser___ReduceAction287___action;
+  fra.me.line = 9905;
+  fra.me.meth = LOCATE_parser___ReduceAction304___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -31491,72 +33058,72 @@ void parser___ReduceAction287___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9440 */
+  /* ./parser//parser.nit:9907 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9441 */
+  /* ./parser//parser.nit:9908 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9442 */
+  /* ./parser//parser.nit:9909 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9444 */
+  /* ./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, 9444);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9911);
   }
-  /* ./parser//parser.nit:9446 */
+  /* ./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, 9446);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9913);
   }
-  /* ./parser//parser.nit:9447 */
+  /* ./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:9453 */
+  /* ./parser//parser.nit:9920 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9454 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction287____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9454);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9921);
   }
-  REGB0 = ATTR_parser___ReduceAction287____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction304____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction287___init(val_t p0, val_t p1, int* init_table){
-  int itpos279 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction287].i;
+void parser___ReduceAction304___init(val_t p0, val_t p1, int* init_table){
+  int itpos295 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction304].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos279]) return;
+  if (init_table[itpos295]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9457;
-  fra.me.meth = LOCATE_parser___ReduceAction287___init;
+  fra.me.line = 9924;
+  fra.me.meth = LOCATE_parser___ReduceAction304___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9457 */
+  /* ./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___ReduceAction287____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction304____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos279] = 1;
+  init_table[itpos295] = 1;
   return;
 }
-void parser___ReduceAction288___action(val_t p0, val_t p1){
+void parser___ReduceAction305___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9461;
-  fra.me.meth = LOCATE_parser___ReduceAction288___action;
+  fra.me.line = 9928;
+  fra.me.meth = LOCATE_parser___ReduceAction305___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -31567,80 +33134,80 @@ void parser___ReduceAction288___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:9463 */
+  /* ./parser//parser.nit:9930 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9464 */
+  /* ./parser//parser.nit:9931 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9465 */
+  /* ./parser//parser.nit:9932 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9466 */
+  /* ./parser//parser.nit:9933 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9468 */
+  /* ./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, 9468);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9935);
   }
-  /* ./parser//parser.nit:9470 */
+  /* ./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, 9470);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9937);
   }
-  /* ./parser//parser.nit:9472 */
+  /* ./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, 9472);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9939);
   }
-  /* ./parser//parser.nit:9473 */
+  /* ./parser//parser.nit:9940 */
   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:9479 */
+  /* ./parser//parser.nit:9946 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9480 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction288____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9480);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9947);
   }
-  REGB0 = ATTR_parser___ReduceAction288____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction305____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction288___init(val_t p0, val_t p1, int* init_table){
-  int itpos280 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction288].i;
+void parser___ReduceAction305___init(val_t p0, val_t p1, int* init_table){
+  int itpos296 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction305].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos280]) return;
+  if (init_table[itpos296]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9483;
-  fra.me.meth = LOCATE_parser___ReduceAction288___init;
+  fra.me.line = 9950;
+  fra.me.meth = LOCATE_parser___ReduceAction305___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9483 */
+  /* ./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___ReduceAction288____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction305____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos280] = 1;
+  init_table[itpos296] = 1;
   return;
 }
-void parser___ReduceAction289___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 = 9487;
-  fra.me.meth = LOCATE_parser___ReduceAction289___action;
+  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;
@@ -31649,58 +33216,58 @@ void parser___ReduceAction289___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:9489 */
+  /* ./parser//parser.nit:9956 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9490 */
+  /* ./parser//parser.nit:9957 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9491 */
+  /* ./parser//parser.nit:9958 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9493 */
+  /* ./parser//parser.nit:9960 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9494 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction289____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9494);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9961);
   }
-  REGB0 = ATTR_parser___ReduceAction289____goto(fra.me.REG[0]);
+  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___ReduceAction289___init(val_t p0, val_t p1, int* init_table){
-  int itpos281 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction289].i;
+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[itpos281]) return;
+  if (init_table[itpos297]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9497;
-  fra.me.meth = LOCATE_parser___ReduceAction289___init;
+  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:9497 */
+  /* ./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___ReduceAction289____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction306____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos281] = 1;
+  init_table[itpos297] = 1;
   return;
 }
-void parser___ReduceAction293___action(val_t p0, val_t p1){
+void parser___ReduceAction310___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9501;
-  fra.me.meth = LOCATE_parser___ReduceAction293___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;
@@ -31713,90 +33280,90 @@ void parser___ReduceAction293___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:9503 */
+  /* ./parser//parser.nit:9970 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9504 */
+  /* ./parser//parser.nit:9971 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9505 */
+  /* ./parser//parser.nit:9972 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9506 */
+  /* ./parser//parser.nit:9973 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9507 */
+  /* ./parser//parser.nit:9974 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9508 */
+  /* ./parser//parser.nit:9975 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9510 */
+  /* ./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, 9510);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9977);
   }
-  /* ./parser//parser.nit:9512 */
+  /* ./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, 9512);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9979);
   }
-  /* ./parser//parser.nit:9513 */
+  /* ./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:9515 */
+  /* ./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, 9515);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9982);
   }
-  /* ./parser//parser.nit:9516 */
+  /* ./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:9517 */
+  /* ./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:9522 */
+  /* ./parser//parser.nit:9989 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:9523 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction293____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, 9523);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9990);
   }
-  REGB0 = ATTR_parser___ReduceAction293____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___ReduceAction293___init(val_t p0, val_t p1, int* init_table){
-  int itpos282 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction293].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[itpos282]) 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 = 9526;
-  fra.me.meth = LOCATE_parser___ReduceAction293___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:9526 */
+  /* ./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___ReduceAction293____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction310____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos282] = 1;
+  init_table[itpos298] = 1;
   return;
 }
-void parser___ReduceAction295___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 = 9530;
-  fra.me.meth = LOCATE_parser___ReduceAction295___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;
@@ -31810,114 +33377,114 @@ void parser___ReduceAction295___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:9532 */
+  /* ./parser//parser.nit:9999 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9533 */
+  /* ./parser//parser.nit:10000 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9534 */
+  /* ./parser//parser.nit:10001 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9535 */
+  /* ./parser//parser.nit:10002 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9536 */
+  /* ./parser//parser.nit:10003 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9537 */
+  /* ./parser//parser.nit:10004 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9538 */
+  /* ./parser//parser.nit:10005 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9539 */
+  /* ./parser//parser.nit:10006 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9540 */
+  /* ./parser//parser.nit:10007 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9541 */
+  /* ./parser//parser.nit:10008 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9542 */
+  /* ./parser//parser.nit:10009 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9543 */
+  /* ./parser//parser.nit:10010 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9545 */
+  /* ./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, 9545);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10012);
   }
-  /* ./parser//parser.nit:9547 */
+  /* ./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, 9547);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10014);
   }
-  /* ./parser//parser.nit:9549 */
+  /* ./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, 9549);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10016);
   }
-  /* ./parser//parser.nit:9551 */
+  /* ./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, 9551);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10018);
   }
-  /* ./parser//parser.nit:9553 */
+  /* ./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, 9553);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10020);
   }
-  /* ./parser//parser.nit:9555 */
+  /* ./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, 9555);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10022);
   }
-  /* ./parser//parser.nit:9556 */
+  /* ./parser//parser.nit:10023 */
   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:9564 */
+  /* ./parser//parser.nit:10031 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9565 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction295____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, 9565);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10032);
   }
-  REGB0 = ATTR_parser___ReduceAction295____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___ReduceAction295___init(val_t p0, val_t p1, int* init_table){
-  int itpos283 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction295].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[itpos283]) return;
+  if (init_table[itpos299]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9568;
-  fra.me.meth = LOCATE_parser___ReduceAction295___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:9568 */
+  /* ./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___ReduceAction295____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction312____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos283] = 1;
+  init_table[itpos299] = 1;
   return;
 }
-void parser___ReduceAction297___action(val_t p0, val_t p1){
+void parser___ReduceAction314___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9572;
-  fra.me.meth = LOCATE_parser___ReduceAction297___action;
+  fra.me.line = 10039;
+  fra.me.meth = LOCATE_parser___ReduceAction314___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -31927,76 +33494,76 @@ void parser___ReduceAction297___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:9574 */
+  /* ./parser//parser.nit:10041 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9575 */
+  /* ./parser//parser.nit:10042 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9576 */
+  /* ./parser//parser.nit:10043 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9577 */
+  /* ./parser//parser.nit:10044 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9578 */
+  /* ./parser//parser.nit:10045 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9580 */
+  /* ./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, 9580);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10047);
   }
-  /* ./parser//parser.nit:9582 */
+  /* ./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, 9582);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10049);
   }
-  /* ./parser//parser.nit:9583 */
+  /* ./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:9587 */
+  /* ./parser//parser.nit:10054 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9588 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction297____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9588);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10055);
   }
-  REGB0 = ATTR_parser___ReduceAction297____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction314____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction297___init(val_t p0, val_t p1, int* init_table){
-  int itpos284 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction297].i;
+void parser___ReduceAction314___init(val_t p0, val_t p1, int* init_table){
+  int itpos300 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction314].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos284]) return;
+  if (init_table[itpos300]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9591;
-  fra.me.meth = LOCATE_parser___ReduceAction297___init;
+  fra.me.line = 10058;
+  fra.me.meth = LOCATE_parser___ReduceAction314___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9591 */
+  /* ./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___ReduceAction297____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction314____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos284] = 1;
+  init_table[itpos300] = 1;
   return;
 }
-void parser___ReduceAction298___action(val_t p0, val_t p1){
+void parser___ReduceAction315___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9595;
-  fra.me.meth = LOCATE_parser___ReduceAction298___action;
+  fra.me.line = 10062;
+  fra.me.meth = LOCATE_parser___ReduceAction315___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -32006,76 +33573,76 @@ void parser___ReduceAction298___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:9597 */
+  /* ./parser//parser.nit:10064 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9598 */
+  /* ./parser//parser.nit:10065 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9599 */
+  /* ./parser//parser.nit:10066 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9600 */
+  /* ./parser//parser.nit:10067 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9601 */
+  /* ./parser//parser.nit:10068 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9603 */
+  /* ./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, 9603);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10070);
   }
-  /* ./parser//parser.nit:9605 */
+  /* ./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, 9605);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10072);
   }
-  /* ./parser//parser.nit:9606 */
+  /* ./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:9610 */
+  /* ./parser//parser.nit:10077 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9611 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction298____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9611);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10078);
   }
-  REGB0 = ATTR_parser___ReduceAction298____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction315____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction298___init(val_t p0, val_t p1, int* init_table){
-  int itpos285 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction298].i;
+void parser___ReduceAction315___init(val_t p0, val_t p1, int* init_table){
+  int itpos301 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction315].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos285]) return;
+  if (init_table[itpos301]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9614;
-  fra.me.meth = LOCATE_parser___ReduceAction298___init;
+  fra.me.line = 10081;
+  fra.me.meth = LOCATE_parser___ReduceAction315___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9614 */
+  /* ./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___ReduceAction298____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction315____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos285] = 1;
+  init_table[itpos301] = 1;
   return;
 }
-void parser___ReduceAction299___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 = 9618;
-  fra.me.meth = LOCATE_parser___ReduceAction299___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;
@@ -32085,78 +33652,78 @@ void parser___ReduceAction299___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:9620 */
+  /* ./parser//parser.nit:10087 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9621 */
+  /* ./parser//parser.nit:10088 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9622 */
+  /* ./parser//parser.nit:10089 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9623 */
+  /* ./parser//parser.nit:10090 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9624 */
+  /* ./parser//parser.nit:10091 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9625 */
+  /* ./parser//parser.nit:10092 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9627 */
+  /* ./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, 9627);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10094);
   }
-  /* ./parser//parser.nit:9629 */
+  /* ./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, 9629);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10096);
   }
-  /* ./parser//parser.nit:9630 */
+  /* ./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:9634 */
+  /* ./parser//parser.nit:10101 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9635 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction299____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, 9635);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10102);
   }
-  REGB0 = ATTR_parser___ReduceAction299____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___ReduceAction299___init(val_t p0, val_t p1, int* init_table){
-  int itpos286 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction299].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[itpos286]) return;
+  if (init_table[itpos302]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9638;
-  fra.me.meth = LOCATE_parser___ReduceAction299___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:9638 */
+  /* ./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___ReduceAction299____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction316____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos286] = 1;
+  init_table[itpos302] = 1;
   return;
 }
-void parser___ReduceAction301___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 = 9642;
-  fra.me.meth = LOCATE_parser___ReduceAction301___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;
@@ -32166,74 +33733,74 @@ void parser___ReduceAction301___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:9644 */
+  /* ./parser//parser.nit:10111 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9645 */
+  /* ./parser//parser.nit:10112 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9646 */
+  /* ./parser//parser.nit:10113 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9647 */
+  /* ./parser//parser.nit:10114 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9649 */
+  /* ./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, 9649);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10116);
   }
-  /* ./parser//parser.nit:9651 */
+  /* ./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, 9651);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10118);
   }
-  /* ./parser//parser.nit:9652 */
+  /* ./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:9656 */
+  /* ./parser//parser.nit:10123 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9657 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction301____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, 9657);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10124);
   }
-  REGB0 = ATTR_parser___ReduceAction301____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___ReduceAction301___init(val_t p0, val_t p1, int* init_table){
-  int itpos287 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction301].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[itpos287]) return;
+  if (init_table[itpos303]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9660;
-  fra.me.meth = LOCATE_parser___ReduceAction301___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:9660 */
+  /* ./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___ReduceAction301____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction318____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos287] = 1;
+  init_table[itpos303] = 1;
   return;
 }
-void parser___ReduceAction303___action(val_t p0, val_t p1){
+void parser___ReduceAction320___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9664;
-  fra.me.meth = LOCATE_parser___ReduceAction303___action;
+  fra.me.line = 10131;
+  fra.me.meth = LOCATE_parser___ReduceAction320___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -32243,76 +33810,76 @@ void parser___ReduceAction303___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9666 */
+  /* ./parser//parser.nit:10133 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9667 */
+  /* ./parser//parser.nit:10134 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9668 */
+  /* ./parser//parser.nit:10135 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9669 */
+  /* ./parser//parser.nit:10136 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9670 */
+  /* ./parser//parser.nit:10137 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9672 */
+  /* ./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, 9672);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10139);
   }
-  /* ./parser//parser.nit:9674 */
+  /* ./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, 9674);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10141);
   }
-  /* ./parser//parser.nit:9675 */
+  /* ./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:9679 */
+  /* ./parser//parser.nit:10146 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9680 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction303____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9680);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10147);
   }
-  REGB0 = ATTR_parser___ReduceAction303____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction320____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction303___init(val_t p0, val_t p1, int* init_table){
-  int itpos288 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction303].i;
+void parser___ReduceAction320___init(val_t p0, val_t p1, int* init_table){
+  int itpos304 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction320].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos288]) return;
+  if (init_table[itpos304]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9683;
-  fra.me.meth = LOCATE_parser___ReduceAction303___init;
+  fra.me.line = 10150;
+  fra.me.meth = LOCATE_parser___ReduceAction320___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9683 */
+  /* ./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___ReduceAction303____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction320____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos288] = 1;
+  init_table[itpos304] = 1;
   return;
 }
-void parser___ReduceAction304___action(val_t p0, val_t p1){
+void parser___ReduceAction321___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9687;
-  fra.me.meth = LOCATE_parser___ReduceAction304___action;
+  fra.me.line = 10154;
+  fra.me.meth = LOCATE_parser___ReduceAction321___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -32322,76 +33889,76 @@ void parser___ReduceAction304___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9689 */
+  /* ./parser//parser.nit:10156 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9690 */
+  /* ./parser//parser.nit:10157 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9691 */
+  /* ./parser//parser.nit:10158 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9692 */
+  /* ./parser//parser.nit:10159 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9693 */
+  /* ./parser//parser.nit:10160 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9695 */
+  /* ./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, 9695);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10162);
   }
-  /* ./parser//parser.nit:9697 */
+  /* ./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, 9697);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10164);
   }
-  /* ./parser//parser.nit:9698 */
+  /* ./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:9702 */
+  /* ./parser//parser.nit:10169 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9703 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction304____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9703);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10170);
   }
-  REGB0 = ATTR_parser___ReduceAction304____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction321____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction304___init(val_t p0, val_t p1, int* init_table){
-  int itpos289 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction304].i;
+void parser___ReduceAction321___init(val_t p0, val_t p1, int* init_table){
+  int itpos305 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction321].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos289]) return;
+  if (init_table[itpos305]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9706;
-  fra.me.meth = LOCATE_parser___ReduceAction304___init;
+  fra.me.line = 10173;
+  fra.me.meth = LOCATE_parser___ReduceAction321___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9706 */
+  /* ./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___ReduceAction304____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction321____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos289] = 1;
+  init_table[itpos305] = 1;
   return;
 }
-void parser___ReduceAction305___action(val_t p0, val_t p1){
+void parser___ReduceAction322___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9710;
-  fra.me.meth = LOCATE_parser___ReduceAction305___action;
+  fra.me.line = 10177;
+  fra.me.meth = LOCATE_parser___ReduceAction322___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -32401,76 +33968,76 @@ void parser___ReduceAction305___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9712 */
+  /* ./parser//parser.nit:10179 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9713 */
+  /* ./parser//parser.nit:10180 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9714 */
+  /* ./parser//parser.nit:10181 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9715 */
+  /* ./parser//parser.nit:10182 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9716 */
+  /* ./parser//parser.nit:10183 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9718 */
+  /* ./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, 9718);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10185);
   }
-  /* ./parser//parser.nit:9720 */
+  /* ./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, 9720);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10187);
   }
-  /* ./parser//parser.nit:9721 */
+  /* ./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:9725 */
+  /* ./parser//parser.nit:10192 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9726 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction305____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9726);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10193);
   }
-  REGB0 = ATTR_parser___ReduceAction305____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction322____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction305___init(val_t p0, val_t p1, int* init_table){
-  int itpos290 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction305].i;
+void parser___ReduceAction322___init(val_t p0, val_t p1, int* init_table){
+  int itpos306 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction322].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos290]) return;
+  if (init_table[itpos306]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9729;
-  fra.me.meth = LOCATE_parser___ReduceAction305___init;
+  fra.me.line = 10196;
+  fra.me.meth = LOCATE_parser___ReduceAction322___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9729 */
+  /* ./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___ReduceAction305____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction322____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos290] = 1;
+  init_table[itpos306] = 1;
   return;
 }
-void parser___ReduceAction306___action(val_t p0, val_t p1){
+void parser___ReduceAction323___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9733;
-  fra.me.meth = LOCATE_parser___ReduceAction306___action;
+  fra.me.line = 10200;
+  fra.me.meth = LOCATE_parser___ReduceAction323___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -32480,76 +34047,76 @@ void parser___ReduceAction306___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9735 */
+  /* ./parser//parser.nit:10202 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9736 */
+  /* ./parser//parser.nit:10203 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9737 */
+  /* ./parser//parser.nit:10204 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9738 */
+  /* ./parser//parser.nit:10205 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9739 */
+  /* ./parser//parser.nit:10206 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9741 */
+  /* ./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, 9741);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10208);
   }
-  /* ./parser//parser.nit:9743 */
+  /* ./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, 9743);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10210);
   }
-  /* ./parser//parser.nit:9744 */
+  /* ./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:9748 */
+  /* ./parser//parser.nit:10215 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9749 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction306____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9749);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10216);
   }
-  REGB0 = ATTR_parser___ReduceAction306____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction323____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos291 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction306].i;
+void parser___ReduceAction323___init(val_t p0, val_t p1, int* init_table){
+  int itpos307 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction323].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos291]) return;
+  if (init_table[itpos307]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9752;
-  fra.me.meth = LOCATE_parser___ReduceAction306___init;
+  fra.me.line = 10219;
+  fra.me.meth = LOCATE_parser___ReduceAction323___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9752 */
+  /* ./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___ReduceAction306____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction323____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos291] = 1;
+  init_table[itpos307] = 1;
   return;
 }
-void parser___ReduceAction307___action(val_t p0, val_t p1){
+void parser___ReduceAction324___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9756;
-  fra.me.meth = LOCATE_parser___ReduceAction307___action;
+  fra.me.line = 10223;
+  fra.me.meth = LOCATE_parser___ReduceAction324___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -32559,76 +34126,76 @@ void parser___ReduceAction307___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:9758 */
+  /* ./parser//parser.nit:10225 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9759 */
+  /* ./parser//parser.nit:10226 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9760 */
+  /* ./parser//parser.nit:10227 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9761 */
+  /* ./parser//parser.nit:10228 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9762 */
+  /* ./parser//parser.nit:10229 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9764 */
+  /* ./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, 9764);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10231);
   }
-  /* ./parser//parser.nit:9766 */
+  /* ./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, 9766);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10233);
   }
-  /* ./parser//parser.nit:9767 */
+  /* ./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:9771 */
+  /* ./parser//parser.nit:10238 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9772 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction307____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9772);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10239);
   }
-  REGB0 = ATTR_parser___ReduceAction307____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction324____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction307___init(val_t p0, val_t p1, int* init_table){
-  int itpos292 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction307].i;
+void parser___ReduceAction324___init(val_t p0, val_t p1, int* init_table){
+  int itpos308 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction324].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos292]) return;
+  if (init_table[itpos308]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9775;
-  fra.me.meth = LOCATE_parser___ReduceAction307___init;
+  fra.me.line = 10242;
+  fra.me.meth = LOCATE_parser___ReduceAction324___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9775 */
+  /* ./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___ReduceAction307____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction324____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos292] = 1;
+  init_table[itpos308] = 1;
   return;
 }
-void parser___ReduceAction308___action(val_t p0, val_t p1){
+void parser___ReduceAction325___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9779;
-  fra.me.meth = LOCATE_parser___ReduceAction308___action;
+  fra.me.line = 10246;
+  fra.me.meth = LOCATE_parser___ReduceAction325___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -32638,76 +34205,76 @@ void parser___ReduceAction308___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9781 */
+  /* ./parser//parser.nit:10248 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9782 */
+  /* ./parser//parser.nit:10249 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9783 */
+  /* ./parser//parser.nit:10250 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9784 */
+  /* ./parser//parser.nit:10251 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9785 */
+  /* ./parser//parser.nit:10252 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9787 */
+  /* ./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, 9787);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10254);
   }
-  /* ./parser//parser.nit:9789 */
+  /* ./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, 9789);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10256);
   }
-  /* ./parser//parser.nit:9790 */
+  /* ./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:9794 */
+  /* ./parser//parser.nit:10261 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9795 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction308____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9795);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10262);
   }
-  REGB0 = ATTR_parser___ReduceAction308____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction325____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction308___init(val_t p0, val_t p1, int* init_table){
-  int itpos293 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction308].i;
+void parser___ReduceAction325___init(val_t p0, val_t p1, int* init_table){
+  int itpos309 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction325].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos293]) return;
+  if (init_table[itpos309]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9798;
-  fra.me.meth = LOCATE_parser___ReduceAction308___init;
+  fra.me.line = 10265;
+  fra.me.meth = LOCATE_parser___ReduceAction325___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9798 */
+  /* ./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___ReduceAction308____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction325____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos293] = 1;
+  init_table[itpos309] = 1;
   return;
 }
-void parser___ReduceAction309___action(val_t p0, val_t p1){
+void parser___ReduceAction326___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9802;
-  fra.me.meth = LOCATE_parser___ReduceAction309___action;
+  fra.me.line = 10269;
+  fra.me.meth = LOCATE_parser___ReduceAction326___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -32717,76 +34284,76 @@ void parser___ReduceAction309___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:9804 */
+  /* ./parser//parser.nit:10271 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9805 */
+  /* ./parser//parser.nit:10272 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9806 */
+  /* ./parser//parser.nit:10273 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9807 */
+  /* ./parser//parser.nit:10274 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9808 */
+  /* ./parser//parser.nit:10275 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9810 */
+  /* ./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, 9810);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10277);
   }
-  /* ./parser//parser.nit:9812 */
+  /* ./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, 9812);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10279);
   }
-  /* ./parser//parser.nit:9813 */
+  /* ./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:9817 */
+  /* ./parser//parser.nit:10284 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9818 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction309____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9818);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10285);
   }
-  REGB0 = ATTR_parser___ReduceAction309____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction326____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos294 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction309].i;
+void parser___ReduceAction326___init(val_t p0, val_t p1, int* init_table){
+  int itpos310 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction326].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos294]) return;
+  if (init_table[itpos310]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9821;
-  fra.me.meth = LOCATE_parser___ReduceAction309___init;
+  fra.me.line = 10288;
+  fra.me.meth = LOCATE_parser___ReduceAction326___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9821 */
+  /* ./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___ReduceAction309____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction326____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos294] = 1;
+  init_table[itpos310] = 1;
   return;
 }
-void parser___ReduceAction310___action(val_t p0, val_t p1){
+void parser___ReduceAction327___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9825;
-  fra.me.meth = LOCATE_parser___ReduceAction310___action;
+  fra.me.line = 10292;
+  fra.me.meth = LOCATE_parser___ReduceAction327___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -32796,76 +34363,76 @@ void parser___ReduceAction310___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9827 */
+  /* ./parser//parser.nit:10294 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9828 */
+  /* ./parser//parser.nit:10295 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9829 */
+  /* ./parser//parser.nit:10296 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9830 */
+  /* ./parser//parser.nit:10297 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9831 */
+  /* ./parser//parser.nit:10298 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9833 */
+  /* ./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, 9833);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10300);
   }
-  /* ./parser//parser.nit:9835 */
+  /* ./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, 9835);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10302);
   }
-  /* ./parser//parser.nit:9836 */
+  /* ./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:9840 */
+  /* ./parser//parser.nit:10307 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9841 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction310____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9841);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10308);
   }
-  REGB0 = ATTR_parser___ReduceAction310____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction327____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction310___init(val_t p0, val_t p1, int* init_table){
-  int itpos295 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction310].i;
+void parser___ReduceAction327___init(val_t p0, val_t p1, int* init_table){
+  int itpos311 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction327].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos295]) return;
+  if (init_table[itpos311]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9844;
-  fra.me.meth = LOCATE_parser___ReduceAction310___init;
+  fra.me.line = 10311;
+  fra.me.meth = LOCATE_parser___ReduceAction327___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9844 */
+  /* ./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___ReduceAction310____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction327____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos295] = 1;
+  init_table[itpos311] = 1;
   return;
 }
-void parser___ReduceAction311___action(val_t p0, val_t p1){
+void parser___ReduceAction328___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9848;
-  fra.me.meth = LOCATE_parser___ReduceAction311___action;
+  fra.me.line = 10315;
+  fra.me.meth = LOCATE_parser___ReduceAction328___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -32875,76 +34442,76 @@ void parser___ReduceAction311___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9850 */
+  /* ./parser//parser.nit:10317 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9851 */
+  /* ./parser//parser.nit:10318 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9852 */
+  /* ./parser//parser.nit:10319 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9853 */
+  /* ./parser//parser.nit:10320 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9854 */
+  /* ./parser//parser.nit:10321 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9856 */
+  /* ./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, 9856);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10323);
   }
-  /* ./parser//parser.nit:9858 */
+  /* ./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, 9858);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10325);
   }
-  /* ./parser//parser.nit:9859 */
+  /* ./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:9863 */
+  /* ./parser//parser.nit:10330 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9864 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction311____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9864);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10331);
   }
-  REGB0 = ATTR_parser___ReduceAction311____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction328____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos296 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction311].i;
+void parser___ReduceAction328___init(val_t p0, val_t p1, int* init_table){
+  int itpos312 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction328].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos296]) return;
+  if (init_table[itpos312]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9867;
-  fra.me.meth = LOCATE_parser___ReduceAction311___init;
+  fra.me.line = 10334;
+  fra.me.meth = LOCATE_parser___ReduceAction328___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9867 */
+  /* ./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___ReduceAction311____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction328____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos296] = 1;
+  init_table[itpos312] = 1;
   return;
 }
-void parser___ReduceAction312___action(val_t p0, val_t p1){
+void parser___ReduceAction329___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9871;
-  fra.me.meth = LOCATE_parser___ReduceAction312___action;
+  fra.me.line = 10338;
+  fra.me.meth = LOCATE_parser___ReduceAction329___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -32954,76 +34521,76 @@ void parser___ReduceAction312___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9873 */
+  /* ./parser//parser.nit:10340 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9874 */
+  /* ./parser//parser.nit:10341 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9875 */
+  /* ./parser//parser.nit:10342 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9876 */
+  /* ./parser//parser.nit:10343 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9877 */
+  /* ./parser//parser.nit:10344 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9879 */
+  /* ./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, 9879);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10346);
   }
-  /* ./parser//parser.nit:9881 */
+  /* ./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, 9881);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10348);
   }
-  /* ./parser//parser.nit:9882 */
+  /* ./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:9886 */
+  /* ./parser//parser.nit:10353 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9887 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction312____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9887);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10354);
   }
-  REGB0 = ATTR_parser___ReduceAction312____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction329____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction312___init(val_t p0, val_t p1, int* init_table){
-  int itpos297 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction312].i;
+void parser___ReduceAction329___init(val_t p0, val_t p1, int* init_table){
+  int itpos313 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction329].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos297]) return;
+  if (init_table[itpos313]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9890;
-  fra.me.meth = LOCATE_parser___ReduceAction312___init;
+  fra.me.line = 10357;
+  fra.me.meth = LOCATE_parser___ReduceAction329___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9890 */
+  /* ./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___ReduceAction312____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction329____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos297] = 1;
+  init_table[itpos313] = 1;
   return;
 }
-void parser___ReduceAction313___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 = 9894;
-  fra.me.meth = LOCATE_parser___ReduceAction313___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;
@@ -33033,76 +34600,76 @@ void parser___ReduceAction313___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9896 */
+  /* ./parser//parser.nit:10363 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9897 */
+  /* ./parser//parser.nit:10364 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9898 */
+  /* ./parser//parser.nit:10365 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9899 */
+  /* ./parser//parser.nit:10366 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9900 */
+  /* ./parser//parser.nit:10367 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9902 */
+  /* ./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, 9902);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10369);
   }
-  /* ./parser//parser.nit:9904 */
+  /* ./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, 9904);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10371);
   }
-  /* ./parser//parser.nit:9905 */
+  /* ./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:9909 */
+  /* ./parser//parser.nit:10376 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9910 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction313____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, 9910);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10377);
   }
-  REGB0 = ATTR_parser___ReduceAction313____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___ReduceAction313___init(val_t p0, val_t p1, int* init_table){
-  int itpos298 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction313].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[itpos298]) return;
+  if (init_table[itpos314]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9913;
-  fra.me.meth = LOCATE_parser___ReduceAction313___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:9913 */
+  /* ./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___ReduceAction313____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction330____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos298] = 1;
+  init_table[itpos314] = 1;
   return;
 }
-void parser___ReduceAction315___action(val_t p0, val_t p1){
+void parser___ReduceAction332___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 = 9917;
-  fra.me.meth = LOCATE_parser___ReduceAction315___action;
+  fra.me.line = 10384;
+  fra.me.meth = LOCATE_parser___ReduceAction332___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -33112,76 +34679,76 @@ 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:9919 */
+  /* ./parser//parser.nit:10386 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9920 */
+  /* ./parser//parser.nit:10387 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9921 */
+  /* ./parser//parser.nit:10388 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9922 */
+  /* ./parser//parser.nit:10389 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9923 */
+  /* ./parser//parser.nit:10390 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9925 */
+  /* ./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, 9925);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10392);
   }
-  /* ./parser//parser.nit:9927 */
+  /* ./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, 9927);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10394);
   }
-  /* ./parser//parser.nit:9928 */
+  /* ./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:9932 */
+  /* ./parser//parser.nit:10399 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9933 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction315____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9933);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10400);
   }
-  REGB0 = ATTR_parser___ReduceAction315____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction332____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction315___init(val_t p0, val_t p1, int* init_table){
-  int itpos299 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction315].i;
+void parser___ReduceAction332___init(val_t p0, val_t p1, int* init_table){
+  int itpos315 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction332].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos299]) return;
+  if (init_table[itpos315]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9936;
-  fra.me.meth = LOCATE_parser___ReduceAction315___init;
+  fra.me.line = 10403;
+  fra.me.meth = LOCATE_parser___ReduceAction332___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9936 */
+  /* ./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___ReduceAction315____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction332____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos299] = 1;
+  init_table[itpos315] = 1;
   return;
 }
-void parser___ReduceAction316___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 = 9940;
-  fra.me.meth = LOCATE_parser___ReduceAction316___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;
@@ -33191,76 +34758,76 @@ void parser___ReduceAction316___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9942 */
+  /* ./parser//parser.nit:10409 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9943 */
+  /* ./parser//parser.nit:10410 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9944 */
+  /* ./parser//parser.nit:10411 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9945 */
+  /* ./parser//parser.nit:10412 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9946 */
+  /* ./parser//parser.nit:10413 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9948 */
+  /* ./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, 9948);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10415);
   }
-  /* ./parser//parser.nit:9950 */
+  /* ./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, 9950);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10417);
   }
-  /* ./parser//parser.nit:9951 */
+  /* ./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:9955 */
+  /* ./parser//parser.nit:10422 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9956 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction316____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, 9956);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10423);
   }
-  REGB0 = ATTR_parser___ReduceAction316____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___ReduceAction316___init(val_t p0, val_t p1, int* init_table){
-  int itpos300 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction316].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[itpos300]) return;
+  if (init_table[itpos316]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9959;
-  fra.me.meth = LOCATE_parser___ReduceAction316___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:9959 */
+  /* ./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___ReduceAction316____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction333____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos300] = 1;
+  init_table[itpos316] = 1;
   return;
 }
-void parser___ReduceAction318___action(val_t p0, val_t p1){
+void parser___ReduceAction335___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9963;
-  fra.me.meth = LOCATE_parser___ReduceAction318___action;
+  fra.me.line = 10430;
+  fra.me.meth = LOCATE_parser___ReduceAction335___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -33270,76 +34837,76 @@ void parser___ReduceAction318___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9965 */
+  /* ./parser//parser.nit:10432 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9966 */
+  /* ./parser//parser.nit:10433 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9967 */
+  /* ./parser//parser.nit:10434 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9968 */
+  /* ./parser//parser.nit:10435 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9969 */
+  /* ./parser//parser.nit:10436 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9971 */
+  /* ./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, 9971);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10438);
   }
-  /* ./parser//parser.nit:9973 */
+  /* ./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, 9973);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10440);
   }
-  /* ./parser//parser.nit:9974 */
+  /* ./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:9978 */
+  /* ./parser//parser.nit:10445 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9979 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction318____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 9979);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10446);
   }
-  REGB0 = ATTR_parser___ReduceAction318____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction335____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction318___init(val_t p0, val_t p1, int* init_table){
-  int itpos301 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction318].i;
+void parser___ReduceAction335___init(val_t p0, val_t p1, int* init_table){
+  int itpos317 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction335].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos301]) return;
+  if (init_table[itpos317]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9982;
-  fra.me.meth = LOCATE_parser___ReduceAction318___init;
+  fra.me.line = 10449;
+  fra.me.meth = LOCATE_parser___ReduceAction335___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9982 */
+  /* ./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___ReduceAction318____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction335____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos301] = 1;
+  init_table[itpos317] = 1;
   return;
 }
-void parser___ReduceAction319___action(val_t p0, val_t p1){
+void parser___ReduceAction336___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9986;
-  fra.me.meth = LOCATE_parser___ReduceAction319___action;
+  fra.me.line = 10453;
+  fra.me.meth = LOCATE_parser___ReduceAction336___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -33349,76 +34916,76 @@ 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:9988 */
+  /* ./parser//parser.nit:10455 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9989 */
+  /* ./parser//parser.nit:10456 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9990 */
+  /* ./parser//parser.nit:10457 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9991 */
+  /* ./parser//parser.nit:10458 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9992 */
+  /* ./parser//parser.nit:10459 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9994 */
+  /* ./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, 9994);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10461);
   }
-  /* ./parser//parser.nit:9996 */
+  /* ./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, 9996);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10463);
   }
-  /* ./parser//parser.nit:9997 */
+  /* ./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:10001 */
+  /* ./parser//parser.nit:10468 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10002 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction319____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10002);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10469);
   }
-  REGB0 = ATTR_parser___ReduceAction319____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction336____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos302 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction319].i;
+void parser___ReduceAction336___init(val_t p0, val_t p1, int* init_table){
+  int itpos318 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction336].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos302]) return;
+  if (init_table[itpos318]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10005;
-  fra.me.meth = LOCATE_parser___ReduceAction319___init;
+  fra.me.line = 10472;
+  fra.me.meth = LOCATE_parser___ReduceAction336___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10005 */
+  /* ./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___ReduceAction319____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction336____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos302] = 1;
+  init_table[itpos318] = 1;
   return;
 }
-void parser___ReduceAction320___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 = 10009;
-  fra.me.meth = LOCATE_parser___ReduceAction320___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;
@@ -33428,76 +34995,76 @@ 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:10011 */
+  /* ./parser//parser.nit:10478 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10012 */
+  /* ./parser//parser.nit:10479 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10013 */
+  /* ./parser//parser.nit:10480 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10014 */
+  /* ./parser//parser.nit:10481 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10015 */
+  /* ./parser//parser.nit:10482 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10017 */
+  /* ./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, 10017);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10484);
   }
-  /* ./parser//parser.nit:10019 */
+  /* ./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, 10019);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10486);
   }
-  /* ./parser//parser.nit:10020 */
+  /* ./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:10024 */
+  /* ./parser//parser.nit:10491 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10025 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction320____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, 10025);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10492);
   }
-  REGB0 = ATTR_parser___ReduceAction320____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___ReduceAction320___init(val_t p0, val_t p1, int* init_table){
-  int itpos303 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction320].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[itpos303]) return;
+  if (init_table[itpos319]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10028;
-  fra.me.meth = LOCATE_parser___ReduceAction320___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:10028 */
+  /* ./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___ReduceAction320____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction337____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos303] = 1;
+  init_table[itpos319] = 1;
   return;
 }
-void parser___ReduceAction322___action(val_t p0, val_t p1){
+void parser___ReduceAction339___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10032;
-  fra.me.meth = LOCATE_parser___ReduceAction322___action;
+  fra.me.line = 10499;
+  fra.me.meth = LOCATE_parser___ReduceAction339___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -33507,74 +35074,74 @@ 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:10034 */
+  /* ./parser//parser.nit:10501 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10035 */
+  /* ./parser//parser.nit:10502 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10036 */
+  /* ./parser//parser.nit:10503 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10037 */
+  /* ./parser//parser.nit:10504 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10039 */
+  /* ./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, 10039);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10506);
   }
-  /* ./parser//parser.nit:10041 */
+  /* ./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, 10041);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10508);
   }
-  /* ./parser//parser.nit:10042 */
+  /* ./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:10046 */
+  /* ./parser//parser.nit:10513 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10047 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction322____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10047);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10514);
   }
-  REGB0 = ATTR_parser___ReduceAction322____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction339____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction322___init(val_t p0, val_t p1, int* init_table){
-  int itpos304 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction322].i;
+void parser___ReduceAction339___init(val_t p0, val_t p1, int* init_table){
+  int itpos320 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction339].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos304]) return;
+  if (init_table[itpos320]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10050;
-  fra.me.meth = LOCATE_parser___ReduceAction322___init;
+  fra.me.line = 10517;
+  fra.me.meth = LOCATE_parser___ReduceAction339___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10050 */
+  /* ./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___ReduceAction322____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction339____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos304] = 1;
+  init_table[itpos320] = 1;
   return;
 }
-void parser___ReduceAction323___action(val_t p0, val_t p1){
+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 = 10054;
-  fra.me.meth = LOCATE_parser___ReduceAction323___action;
+  fra.me.line = 10521;
+  fra.me.meth = LOCATE_parser___ReduceAction340___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -33584,74 +35151,74 @@ 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:10056 */
+  /* ./parser//parser.nit:10523 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10057 */
+  /* ./parser//parser.nit:10524 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10058 */
+  /* ./parser//parser.nit:10525 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10059 */
+  /* ./parser//parser.nit:10526 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10061 */
+  /* ./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, 10061);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10528);
   }
-  /* ./parser//parser.nit:10063 */
+  /* ./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, 10063);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10530);
   }
-  /* ./parser//parser.nit:10064 */
+  /* ./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:10068 */
+  /* ./parser//parser.nit:10535 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10069 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction323____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10069);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10536);
   }
-  REGB0 = ATTR_parser___ReduceAction323____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___ReduceAction323___init(val_t p0, val_t p1, int* init_table){
-  int itpos305 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction323].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[itpos305]) return;
+  if (init_table[itpos321]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10072;
-  fra.me.meth = LOCATE_parser___ReduceAction323___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:10072 */
+  /* ./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___ReduceAction323____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction340____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos305] = 1;
+  init_table[itpos321] = 1;
   return;
 }
-void parser___ReduceAction325___action(val_t p0, val_t p1){
+void parser___ReduceAction342___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 = 10076;
-  fra.me.meth = LOCATE_parser___ReduceAction325___action;
+  fra.me.line = 10543;
+  fra.me.meth = LOCATE_parser___ReduceAction342___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -33663,87 +35230,87 @@ void parser___ReduceAction325___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:10078 */
+  /* ./parser//parser.nit:10545 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10079 */
+  /* ./parser//parser.nit:10546 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10080 */
+  /* ./parser//parser.nit:10547 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10081 */
+  /* ./parser//parser.nit:10548 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10082 */
+  /* ./parser//parser.nit:10549 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10083 */
+  /* ./parser//parser.nit:10550 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10085 */
+  /* ./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, 10085);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10552);
   }
-  /* ./parser//parser.nit:10087 */
+  /* ./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, 10087);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10554);
   }
-  /* ./parser//parser.nit:10089 */
+  /* ./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, 10089);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10556);
   }
-  /* ./parser//parser.nit:10090 */
+  /* ./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:10091 */
+  /* ./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:10097 */
+  /* ./parser//parser.nit:10564 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:10098 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction325____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10098);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10565);
   }
-  REGB0 = ATTR_parser___ReduceAction325____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction342____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction325___init(val_t p0, val_t p1, int* init_table){
-  int itpos306 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction325].i;
+void parser___ReduceAction342___init(val_t p0, val_t p1, int* init_table){
+  int itpos322 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction342].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos306]) return;
+  if (init_table[itpos322]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10101;
-  fra.me.meth = LOCATE_parser___ReduceAction325___init;
+  fra.me.line = 10568;
+  fra.me.meth = LOCATE_parser___ReduceAction342___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10101 */
+  /* ./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___ReduceAction325____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction342____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos306] = 1;
+  init_table[itpos322] = 1;
   return;
 }
-void parser___ReduceAction326___action(val_t p0, val_t p1){
+void parser___ReduceAction343___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10105;
-  fra.me.meth = LOCATE_parser___ReduceAction326___action;
+  fra.me.line = 10572;
+  fra.me.meth = LOCATE_parser___ReduceAction343___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -33754,84 +35321,84 @@ void parser___ReduceAction326___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:10107 */
+  /* ./parser//parser.nit:10574 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10108 */
+  /* ./parser//parser.nit:10575 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10109 */
+  /* ./parser//parser.nit:10576 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10110 */
+  /* ./parser//parser.nit:10577 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10111 */
+  /* ./parser//parser.nit:10578 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10112 */
+  /* ./parser//parser.nit:10579 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10114 */
+  /* ./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, 10114);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10581);
   }
-  /* ./parser//parser.nit:10116 */
+  /* ./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, 10116);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10583);
   }
-  /* ./parser//parser.nit:10118 */
+  /* ./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, 10118);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10585);
   }
-  /* ./parser//parser.nit:10119 */
+  /* ./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:10124 */
+  /* ./parser//parser.nit:10591 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10125 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction326____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10125);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10592);
   }
-  REGB0 = ATTR_parser___ReduceAction326____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction343____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction326___init(val_t p0, val_t p1, int* init_table){
-  int itpos307 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction326].i;
+void parser___ReduceAction343___init(val_t p0, val_t p1, int* init_table){
+  int itpos323 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction343].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos307]) return;
+  if (init_table[itpos323]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10128;
-  fra.me.meth = LOCATE_parser___ReduceAction326___init;
+  fra.me.line = 10595;
+  fra.me.meth = LOCATE_parser___ReduceAction343___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10128 */
+  /* ./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___ReduceAction326____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction343____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos307] = 1;
+  init_table[itpos323] = 1;
   return;
 }
-void parser___ReduceAction327___action(val_t p0, val_t p1){
+void parser___ReduceAction344___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10132;
-  fra.me.meth = LOCATE_parser___ReduceAction327___action;
+  fra.me.line = 10599;
+  fra.me.meth = LOCATE_parser___ReduceAction344___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -33842,74 +35409,74 @@ void parser___ReduceAction327___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:10134 */
+  /* ./parser//parser.nit:10601 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10135 */
+  /* ./parser//parser.nit:10602 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10136 */
+  /* ./parser//parser.nit:10603 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10138 */
+  /* ./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, 10138);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10605);
   }
-  /* ./parser//parser.nit:10139 */
+  /* ./parser//parser.nit:10606 */
   fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:10142 */
+  /* ./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, 10142);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10609);
   }
-  /* ./parser//parser.nit:10143 */
+  /* ./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:10148 */
+  /* ./parser//parser.nit:10615 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10149 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction327____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10149);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10616);
   }
-  REGB0 = ATTR_parser___ReduceAction327____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction344____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction327___init(val_t p0, val_t p1, int* init_table){
-  int itpos308 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction327].i;
+void parser___ReduceAction344___init(val_t p0, val_t p1, int* init_table){
+  int itpos324 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction344].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos308]) return;
+  if (init_table[itpos324]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10152;
-  fra.me.meth = LOCATE_parser___ReduceAction327___init;
+  fra.me.line = 10619;
+  fra.me.meth = LOCATE_parser___ReduceAction344___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10152 */
+  /* ./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___ReduceAction327____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction344____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos308] = 1;
+  init_table[itpos324] = 1;
   return;
 }
-void parser___ReduceAction328___action(val_t p0, val_t p1){
+void parser___ReduceAction345___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10156;
-  fra.me.meth = LOCATE_parser___ReduceAction328___action;
+  fra.me.line = 10623;
+  fra.me.meth = LOCATE_parser___ReduceAction345___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -33919,76 +35486,76 @@ 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:10158 */
+  /* ./parser//parser.nit:10625 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10159 */
+  /* ./parser//parser.nit:10626 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10160 */
+  /* ./parser//parser.nit:10627 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10161 */
+  /* ./parser//parser.nit:10628 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10162 */
+  /* ./parser//parser.nit:10629 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10164 */
+  /* ./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, 10164);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10631);
   }
-  /* ./parser//parser.nit:10166 */
+  /* ./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, 10166);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10633);
   }
-  /* ./parser//parser.nit:10167 */
+  /* ./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:10171 */
+  /* ./parser//parser.nit:10638 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10172 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction328____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10172);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10639);
   }
-  REGB0 = ATTR_parser___ReduceAction328____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction345____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction328___init(val_t p0, val_t p1, int* init_table){
-  int itpos309 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction328].i;
+void parser___ReduceAction345___init(val_t p0, val_t p1, int* init_table){
+  int itpos325 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction345].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos309]) return;
+  if (init_table[itpos325]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10175;
-  fra.me.meth = LOCATE_parser___ReduceAction328___init;
+  fra.me.line = 10642;
+  fra.me.meth = LOCATE_parser___ReduceAction345___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10175 */
+  /* ./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___ReduceAction328____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction345____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos309] = 1;
+  init_table[itpos325] = 1;
   return;
 }
-void parser___ReduceAction329___action(val_t p0, val_t p1){
+void parser___ReduceAction346___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10179;
-  fra.me.meth = LOCATE_parser___ReduceAction329___action;
+  fra.me.line = 10646;
+  fra.me.meth = LOCATE_parser___ReduceAction346___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -33998,66 +35565,66 @@ 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:10181 */
+  /* ./parser//parser.nit:10648 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10182 */
+  /* ./parser//parser.nit:10649 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10183 */
+  /* ./parser//parser.nit:10650 */
   fra.me.REG[4] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:10186 */
+  /* ./parser//parser.nit:10653 */
   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, 10186);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10653);
   }
-  /* ./parser//parser.nit:10187 */
+  /* ./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:10191 */
+  /* ./parser//parser.nit:10658 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10192 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction329____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:10659 */
+  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, 10192);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10659);
   }
-  REGB0 = ATTR_parser___ReduceAction329____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___ReduceAction329___init(val_t p0, val_t p1, int* init_table){
-  int itpos310 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction329].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[itpos310]) return;
+  if (init_table[itpos326]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10195;
-  fra.me.meth = LOCATE_parser___ReduceAction329___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:10195 */
+  /* ./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___ReduceAction329____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction346____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos310] = 1;
+  init_table[itpos326] = 1;
   return;
 }
-void parser___ReduceAction336___action(val_t p0, val_t p1){
+void parser___ReduceAction353___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10199;
-  fra.me.meth = LOCATE_parser___ReduceAction336___action;
+  fra.me.line = 10666;
+  fra.me.meth = LOCATE_parser___ReduceAction353___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -34069,79 +35636,79 @@ void parser___ReduceAction336___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:10201 */
+  /* ./parser//parser.nit:10668 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10202 */
+  /* ./parser//parser.nit:10669 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10203 */
+  /* ./parser//parser.nit:10670 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10204 */
+  /* ./parser//parser.nit:10671 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10205 */
+  /* ./parser//parser.nit:10672 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10207 */
+  /* ./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, 10207);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10674);
   }
-  /* ./parser//parser.nit:10209 */
+  /* ./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, 10209);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10676);
   }
-  /* ./parser//parser.nit:10210 */
+  /* ./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:10211 */
+  /* ./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:10216 */
+  /* ./parser//parser.nit:10683 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:10217 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction336____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10217);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10684);
   }
-  REGB0 = ATTR_parser___ReduceAction336____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction353____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction336___init(val_t p0, val_t p1, int* init_table){
-  int itpos311 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction336].i;
+void parser___ReduceAction353___init(val_t p0, val_t p1, int* init_table){
+  int itpos327 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction353].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos311]) return;
+  if (init_table[itpos327]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10220;
-  fra.me.meth = LOCATE_parser___ReduceAction336___init;
+  fra.me.line = 10687;
+  fra.me.meth = LOCATE_parser___ReduceAction353___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10220 */
+  /* ./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___ReduceAction336____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction353____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos311] = 1;
+  init_table[itpos327] = 1;
   return;
 }
-void parser___ReduceAction337___action(val_t p0, val_t p1){
+void parser___ReduceAction354___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10224;
-  fra.me.meth = LOCATE_parser___ReduceAction337___action;
+  fra.me.line = 10691;
+  fra.me.meth = LOCATE_parser___ReduceAction354___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -34154,99 +35721,99 @@ void parser___ReduceAction337___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:10226 */
+  /* ./parser//parser.nit:10693 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10227 */
+  /* ./parser//parser.nit:10694 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10228 */
+  /* ./parser//parser.nit:10695 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10229 */
+  /* ./parser//parser.nit:10696 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10230 */
+  /* ./parser//parser.nit:10697 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10231 */
+  /* ./parser//parser.nit:10698 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10232 */
+  /* ./parser//parser.nit:10699 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10233 */
+  /* ./parser//parser.nit:10700 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10234 */
+  /* ./parser//parser.nit:10701 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10236 */
+  /* ./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, 10236);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10703);
   }
-  /* ./parser//parser.nit:10238 */
+  /* ./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, 10238);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10705);
   }
-  /* ./parser//parser.nit:10240 */
+  /* ./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, 10240);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10707);
   }
-  /* ./parser//parser.nit:10242 */
+  /* ./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, 10242);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10709);
   }
-  /* ./parser//parser.nit:10243 */
+  /* ./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:10244 */
+  /* ./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:10250 */
+  /* ./parser//parser.nit:10717 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:10251 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction337____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10251);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10718);
   }
-  REGB0 = ATTR_parser___ReduceAction337____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction354____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction337___init(val_t p0, val_t p1, int* init_table){
-  int itpos312 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction337].i;
+void parser___ReduceAction354___init(val_t p0, val_t p1, int* init_table){
+  int itpos328 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction354].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos312]) return;
+  if (init_table[itpos328]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10254;
-  fra.me.meth = LOCATE_parser___ReduceAction337___init;
+  fra.me.line = 10721;
+  fra.me.meth = LOCATE_parser___ReduceAction354___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10254 */
+  /* ./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___ReduceAction337____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction354____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos312] = 1;
+  init_table[itpos328] = 1;
   return;
 }
-void parser___ReduceAction338___action(val_t p0, val_t p1){
+void parser___ReduceAction355___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10258;
-  fra.me.meth = LOCATE_parser___ReduceAction338___action;
+  fra.me.line = 10725;
+  fra.me.meth = LOCATE_parser___ReduceAction355___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -34257,86 +35824,86 @@ void parser___ReduceAction338___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:10260 */
+  /* ./parser//parser.nit:10727 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10261 */
+  /* ./parser//parser.nit:10728 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10262 */
+  /* ./parser//parser.nit:10729 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10263 */
+  /* ./parser//parser.nit:10730 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10264 */
+  /* ./parser//parser.nit:10731 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10265 */
+  /* ./parser//parser.nit:10732 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10266 */
+  /* ./parser//parser.nit:10733 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10267 */
+  /* ./parser//parser.nit:10734 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10268 */
+  /* ./parser//parser.nit:10735 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10269 */
+  /* ./parser//parser.nit:10736 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10271 */
+  /* ./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, 10271);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10738);
   }
-  /* ./parser//parser.nit:10273 */
+  /* ./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, 10273);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10740);
   }
-  /* ./parser//parser.nit:10274 */
+  /* ./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:10278 */
+  /* ./parser//parser.nit:10745 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10279 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction338____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10279);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10746);
   }
-  REGB0 = ATTR_parser___ReduceAction338____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction355____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos313 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction338].i;
+void parser___ReduceAction355___init(val_t p0, val_t p1, int* init_table){
+  int itpos329 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction355].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos313]) return;
+  if (init_table[itpos329]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10282;
-  fra.me.meth = LOCATE_parser___ReduceAction338___init;
+  fra.me.line = 10749;
+  fra.me.meth = LOCATE_parser___ReduceAction355___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10282 */
+  /* ./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___ReduceAction338____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction355____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos313] = 1;
+  init_table[itpos329] = 1;
   return;
 }
-void parser___ReduceAction339___action(val_t p0, val_t p1){
+void parser___ReduceAction356___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10286;
-  fra.me.meth = LOCATE_parser___ReduceAction339___action;
+  fra.me.line = 10753;
+  fra.me.meth = LOCATE_parser___ReduceAction356___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -34347,86 +35914,86 @@ void parser___ReduceAction339___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:10288 */
+  /* ./parser//parser.nit:10755 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10289 */
+  /* ./parser//parser.nit:10756 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10290 */
+  /* ./parser//parser.nit:10757 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10291 */
+  /* ./parser//parser.nit:10758 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10292 */
+  /* ./parser//parser.nit:10759 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10293 */
+  /* ./parser//parser.nit:10760 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10294 */
+  /* ./parser//parser.nit:10761 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10295 */
+  /* ./parser//parser.nit:10762 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10296 */
+  /* ./parser//parser.nit:10763 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10297 */
+  /* ./parser//parser.nit:10764 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10299 */
+  /* ./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, 10299);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10766);
   }
-  /* ./parser//parser.nit:10301 */
+  /* ./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, 10301);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10768);
   }
-  /* ./parser//parser.nit:10302 */
+  /* ./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:10306 */
+  /* ./parser//parser.nit:10773 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10307 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction339____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:10774 */
+  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, 10307);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10774);
   }
-  REGB0 = ATTR_parser___ReduceAction339____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction356____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction339___init(val_t p0, val_t p1, int* init_table){
-  int itpos314 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction339].i;
+void parser___ReduceAction356___init(val_t p0, val_t p1, int* init_table){
+  int itpos330 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction356].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos314]) return;
+  if (init_table[itpos330]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10310;
-  fra.me.meth = LOCATE_parser___ReduceAction339___init;
+  fra.me.line = 10777;
+  fra.me.meth = LOCATE_parser___ReduceAction356___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10310 */
+  /* ./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___ReduceAction339____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction356____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos314] = 1;
+  init_table[itpos330] = 1;
   return;
 }
-void parser___ReduceAction340___action(val_t p0, val_t p1){
+void parser___ReduceAction357___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10314;
-  fra.me.meth = LOCATE_parser___ReduceAction340___action;
+  fra.me.line = 10781;
+  fra.me.meth = LOCATE_parser___ReduceAction357___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -34436,69 +36003,69 @@ void parser___ReduceAction340___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:10316 */
+  /* ./parser//parser.nit:10783 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10317 */
+  /* ./parser//parser.nit:10784 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10318 */
+  /* ./parser//parser.nit:10785 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10320 */
+  /* ./parser//parser.nit:10787 */
   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, 10320);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10787);
   }
-  /* ./parser//parser.nit:10321 */
+  /* ./parser//parser.nit:10788 */
   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:10322 */
+  /* ./parser//parser.nit:10789 */
   fra.me.REG[4] = NEW_AArrayExpr_parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[4]);
-  /* ./parser//parser.nit:10325 */
+  /* ./parser//parser.nit:10792 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10326 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction340____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10326);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10793);
   }
-  REGB0 = ATTR_parser___ReduceAction340____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction357____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction340___init(val_t p0, val_t p1, int* init_table){
-  int itpos315 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction340].i;
+void parser___ReduceAction357___init(val_t p0, val_t p1, int* init_table){
+  int itpos331 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction357].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos315]) return;
+  if (init_table[itpos331]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10329;
-  fra.me.meth = LOCATE_parser___ReduceAction340___init;
+  fra.me.line = 10796;
+  fra.me.meth = LOCATE_parser___ReduceAction357___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10329 */
+  /* ./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___ReduceAction340____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction357____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos315] = 1;
+  init_table[itpos331] = 1;
   return;
 }
-void parser___ReduceAction341___action(val_t p0, val_t p1){
+void parser___ReduceAction358___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10333;
-  fra.me.meth = LOCATE_parser___ReduceAction341___action;
+  fra.me.line = 10800;
+  fra.me.meth = LOCATE_parser___ReduceAction358___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -34507,64 +36074,64 @@ void parser___ReduceAction341___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:10335 */
+  /* ./parser//parser.nit:10802 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10336 */
+  /* ./parser//parser.nit:10803 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10338 */
+  /* ./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, 10338);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10805);
   }
-  /* ./parser//parser.nit:10339 */
+  /* ./parser//parser.nit:10806 */
   fra.me.REG[3] = NEW_ASelfExpr_parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10342 */
+  /* ./parser//parser.nit:10809 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10343 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction341____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10343);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10810);
   }
-  REGB0 = ATTR_parser___ReduceAction341____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction358____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos316 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction341].i;
+void parser___ReduceAction358___init(val_t p0, val_t p1, int* init_table){
+  int itpos332 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction358].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos316]) return;
+  if (init_table[itpos332]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10346;
-  fra.me.meth = LOCATE_parser___ReduceAction341___init;
+  fra.me.line = 10813;
+  fra.me.meth = LOCATE_parser___ReduceAction358___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10346 */
+  /* ./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___ReduceAction341____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction358____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos316] = 1;
+  init_table[itpos332] = 1;
   return;
 }
-void parser___ReduceAction342___action(val_t p0, val_t p1){
+void parser___ReduceAction359___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10350;
-  fra.me.meth = LOCATE_parser___ReduceAction342___action;
+  fra.me.line = 10817;
+  fra.me.meth = LOCATE_parser___ReduceAction359___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -34573,64 +36140,64 @@ void parser___ReduceAction342___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:10352 */
+  /* ./parser//parser.nit:10819 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10353 */
+  /* ./parser//parser.nit:10820 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10355 */
+  /* ./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, 10355);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10822);
   }
-  /* ./parser//parser.nit:10356 */
+  /* ./parser//parser.nit:10823 */
   fra.me.REG[3] = NEW_ATrueExpr_parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10359 */
+  /* ./parser//parser.nit:10826 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10360 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction342____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10360);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10827);
   }
-  REGB0 = ATTR_parser___ReduceAction342____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction359____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction342___init(val_t p0, val_t p1, int* init_table){
-  int itpos317 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction342].i;
+void parser___ReduceAction359___init(val_t p0, val_t p1, int* init_table){
+  int itpos333 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction359].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos317]) return;
+  if (init_table[itpos333]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10363;
-  fra.me.meth = LOCATE_parser___ReduceAction342___init;
+  fra.me.line = 10830;
+  fra.me.meth = LOCATE_parser___ReduceAction359___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10363 */
+  /* ./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___ReduceAction342____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction359____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos317] = 1;
+  init_table[itpos333] = 1;
   return;
 }
-void parser___ReduceAction343___action(val_t p0, val_t p1){
+void parser___ReduceAction360___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10367;
-  fra.me.meth = LOCATE_parser___ReduceAction343___action;
+  fra.me.line = 10834;
+  fra.me.meth = LOCATE_parser___ReduceAction360___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -34639,64 +36206,64 @@ void parser___ReduceAction343___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:10369 */
+  /* ./parser//parser.nit:10836 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10370 */
+  /* ./parser//parser.nit:10837 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10372 */
+  /* ./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, 10372);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10839);
   }
-  /* ./parser//parser.nit:10373 */
+  /* ./parser//parser.nit:10840 */
   fra.me.REG[3] = NEW_AFalseExpr_parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10376 */
+  /* ./parser//parser.nit:10843 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10377 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction343____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10377);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10844);
   }
-  REGB0 = ATTR_parser___ReduceAction343____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction360____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction343___init(val_t p0, val_t p1, int* init_table){
-  int itpos318 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction343].i;
+void parser___ReduceAction360___init(val_t p0, val_t p1, int* init_table){
+  int itpos334 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction360].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos318]) return;
+  if (init_table[itpos334]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10380;
-  fra.me.meth = LOCATE_parser___ReduceAction343___init;
+  fra.me.line = 10847;
+  fra.me.meth = LOCATE_parser___ReduceAction360___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10380 */
+  /* ./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___ReduceAction343____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction360____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos318] = 1;
+  init_table[itpos334] = 1;
   return;
 }
-void parser___ReduceAction344___action(val_t p0, val_t p1){
+void parser___ReduceAction361___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10384;
-  fra.me.meth = LOCATE_parser___ReduceAction344___action;
+  fra.me.line = 10851;
+  fra.me.meth = LOCATE_parser___ReduceAction361___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -34705,64 +36272,64 @@ void parser___ReduceAction344___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:10386 */
+  /* ./parser//parser.nit:10853 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10387 */
+  /* ./parser//parser.nit:10854 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10389 */
+  /* ./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, 10389);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10856);
   }
-  /* ./parser//parser.nit:10390 */
+  /* ./parser//parser.nit:10857 */
   fra.me.REG[3] = NEW_ANullExpr_parser_prod___ANullExpr___init_anullexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10393 */
+  /* ./parser//parser.nit:10860 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10394 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction344____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10394);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10861);
   }
-  REGB0 = ATTR_parser___ReduceAction344____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction361____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction344___init(val_t p0, val_t p1, int* init_table){
-  int itpos319 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction344].i;
+void parser___ReduceAction361___init(val_t p0, val_t p1, int* init_table){
+  int itpos335 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction361].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos319]) return;
+  if (init_table[itpos335]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10397;
-  fra.me.meth = LOCATE_parser___ReduceAction344___init;
+  fra.me.line = 10864;
+  fra.me.meth = LOCATE_parser___ReduceAction361___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10397 */
+  /* ./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___ReduceAction344____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction361____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos319] = 1;
+  init_table[itpos335] = 1;
   return;
 }
-void parser___ReduceAction345___action(val_t p0, val_t p1){
+void parser___ReduceAction362___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10401;
-  fra.me.meth = LOCATE_parser___ReduceAction345___action;
+  fra.me.line = 10868;
+  fra.me.meth = LOCATE_parser___ReduceAction362___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -34771,64 +36338,64 @@ void parser___ReduceAction345___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:10403 */
+  /* ./parser//parser.nit:10870 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10404 */
+  /* ./parser//parser.nit:10871 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10406 */
+  /* ./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, 10406);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10873);
   }
-  /* ./parser//parser.nit:10407 */
+  /* ./parser//parser.nit:10874 */
   fra.me.REG[3] = NEW_AIntExpr_parser_prod___AIntExpr___init_aintexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10410 */
+  /* ./parser//parser.nit:10877 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10411 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction345____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10411);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10878);
   }
-  REGB0 = ATTR_parser___ReduceAction345____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction362____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction345___init(val_t p0, val_t p1, int* init_table){
-  int itpos320 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction345].i;
+void parser___ReduceAction362___init(val_t p0, val_t p1, int* init_table){
+  int itpos336 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction362].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos320]) return;
+  if (init_table[itpos336]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10414;
-  fra.me.meth = LOCATE_parser___ReduceAction345___init;
+  fra.me.line = 10881;
+  fra.me.meth = LOCATE_parser___ReduceAction362___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10414 */
+  /* ./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___ReduceAction345____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction362____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos320] = 1;
+  init_table[itpos336] = 1;
   return;
 }
-void parser___ReduceAction346___action(val_t p0, val_t p1){
+void parser___ReduceAction363___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10418;
-  fra.me.meth = LOCATE_parser___ReduceAction346___action;
+  fra.me.line = 10885;
+  fra.me.meth = LOCATE_parser___ReduceAction363___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -34837,64 +36404,64 @@ void parser___ReduceAction346___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:10420 */
+  /* ./parser//parser.nit:10887 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10421 */
+  /* ./parser//parser.nit:10888 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10423 */
+  /* ./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, 10423);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10890);
   }
-  /* ./parser//parser.nit:10424 */
+  /* ./parser//parser.nit:10891 */
   fra.me.REG[3] = NEW_AFloatExpr_parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10427 */
+  /* ./parser//parser.nit:10894 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10428 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction346____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10428);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10895);
   }
-  REGB0 = ATTR_parser___ReduceAction346____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction363____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction346___init(val_t p0, val_t p1, int* init_table){
-  int itpos321 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction346].i;
+void parser___ReduceAction363___init(val_t p0, val_t p1, int* init_table){
+  int itpos337 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction363].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos321]) return;
+  if (init_table[itpos337]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10431;
-  fra.me.meth = LOCATE_parser___ReduceAction346___init;
+  fra.me.line = 10898;
+  fra.me.meth = LOCATE_parser___ReduceAction363___init;
   fra.me.has_broke = 0;
   fra.me.REG_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: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___ReduceAction346____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction363____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos321] = 1;
+  init_table[itpos337] = 1;
   return;
 }
-void parser___ReduceAction347___action(val_t p0, val_t p1){
+void parser___ReduceAction364___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10435;
-  fra.me.meth = LOCATE_parser___ReduceAction347___action;
+  fra.me.line = 10902;
+  fra.me.meth = LOCATE_parser___ReduceAction364___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -34903,64 +36470,64 @@ void parser___ReduceAction347___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:10437 */
+  /* ./parser//parser.nit:10904 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10438 */
+  /* ./parser//parser.nit:10905 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10440 */
+  /* ./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, 10440);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10907);
   }
-  /* ./parser//parser.nit:10441 */
+  /* ./parser//parser.nit:10908 */
   fra.me.REG[3] = NEW_ACharExpr_parser_prod___ACharExpr___init_acharexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10444 */
+  /* ./parser//parser.nit:10911 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10445 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction347____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10445);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10912);
   }
-  REGB0 = ATTR_parser___ReduceAction347____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction364____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction347___init(val_t p0, val_t p1, int* init_table){
-  int itpos322 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction347].i;
+void parser___ReduceAction364___init(val_t p0, val_t p1, int* init_table){
+  int itpos338 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction364].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos322]) return;
+  if (init_table[itpos338]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10448;
-  fra.me.meth = LOCATE_parser___ReduceAction347___init;
+  fra.me.line = 10915;
+  fra.me.meth = LOCATE_parser___ReduceAction364___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10448 */
+  /* ./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___ReduceAction347____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction364____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos322] = 1;
+  init_table[itpos338] = 1;
   return;
 }
-void parser___ReduceAction348___action(val_t p0, val_t p1){
+void parser___ReduceAction365___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10452;
-  fra.me.meth = LOCATE_parser___ReduceAction348___action;
+  fra.me.line = 10919;
+  fra.me.meth = LOCATE_parser___ReduceAction365___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -34969,64 +36536,64 @@ void parser___ReduceAction348___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10454 */
+  /* ./parser//parser.nit:10921 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10455 */
+  /* ./parser//parser.nit:10922 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10457 */
+  /* ./parser//parser.nit:10924 */
   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, 10457);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10924);
   }
-  /* ./parser//parser.nit:10458 */
+  /* ./parser//parser.nit:10925 */
   fra.me.REG[3] = NEW_AStringExpr_parser_prod___AStringExpr___init_astringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10461 */
+  /* ./parser//parser.nit:10928 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10462 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction348____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, 10462);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10929);
   }
-  REGB0 = ATTR_parser___ReduceAction348____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___ReduceAction348___init(val_t p0, val_t p1, int* init_table){
-  int itpos323 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction348].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[itpos323]) return;
+  if (init_table[itpos339]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10465;
-  fra.me.meth = LOCATE_parser___ReduceAction348___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:10465 */
+  /* ./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___ReduceAction348____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction365____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos323] = 1;
+  init_table[itpos339] = 1;
   return;
 }
-void parser___ReduceAction351___action(val_t p0, val_t p1){
+void parser___ReduceAction368___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10469;
-  fra.me.meth = LOCATE_parser___ReduceAction351___action;
+  fra.me.line = 10936;
+  fra.me.meth = LOCATE_parser___ReduceAction368___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -35037,94 +36604,94 @@ void parser___ReduceAction351___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:10471 */
+  /* ./parser//parser.nit:10938 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10472 */
+  /* ./parser//parser.nit:10939 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10473 */
+  /* ./parser//parser.nit:10940 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10474 */
+  /* ./parser//parser.nit:10941 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10475 */
+  /* ./parser//parser.nit:10942 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10476 */
+  /* ./parser//parser.nit:10943 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10477 */
+  /* ./parser//parser.nit:10944 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10478 */
+  /* ./parser//parser.nit:10945 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10479 */
+  /* ./parser//parser.nit:10946 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10480 */
+  /* ./parser//parser.nit:10947 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10481 */
+  /* ./parser//parser.nit:10948 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10483 */
+  /* ./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, 10483);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10950);
   }
-  /* ./parser//parser.nit:10485 */
+  /* ./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, 10485);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10952);
   }
-  /* ./parser//parser.nit:10487 */
+  /* ./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, 10487);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10954);
   }
-  /* ./parser//parser.nit:10488 */
+  /* ./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:10493 */
+  /* ./parser//parser.nit:10960 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10494 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction351____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10494);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10961);
   }
-  REGB0 = ATTR_parser___ReduceAction351____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction368____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction351___init(val_t p0, val_t p1, int* init_table){
-  int itpos324 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction351].i;
+void parser___ReduceAction368___init(val_t p0, val_t p1, int* init_table){
+  int itpos340 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction368].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos324]) return;
+  if (init_table[itpos340]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10497;
-  fra.me.meth = LOCATE_parser___ReduceAction351___init;
+  fra.me.line = 10964;
+  fra.me.meth = LOCATE_parser___ReduceAction368___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10497 */
+  /* ./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___ReduceAction351____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction368____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos324] = 1;
+  init_table[itpos340] = 1;
   return;
 }
-void parser___ReduceAction352___action(val_t p0, val_t p1){
+void parser___ReduceAction369___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10501;
-  fra.me.meth = LOCATE_parser___ReduceAction352___action;
+  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;
@@ -35136,105 +36703,105 @@ void parser___ReduceAction352___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:10503 */
+  /* ./parser//parser.nit:10970 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10504 */
+  /* ./parser//parser.nit:10971 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10505 */
+  /* ./parser//parser.nit:10972 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10506 */
+  /* ./parser//parser.nit:10973 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10507 */
+  /* ./parser//parser.nit:10974 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10508 */
+  /* ./parser//parser.nit:10975 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10509 */
+  /* ./parser//parser.nit:10976 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10510 */
+  /* ./parser//parser.nit:10977 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10511 */
+  /* ./parser//parser.nit:10978 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10512 */
+  /* ./parser//parser.nit:10979 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10513 */
+  /* ./parser//parser.nit:10980 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10514 */
+  /* ./parser//parser.nit:10981 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10515 */
+  /* ./parser//parser.nit:10982 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10517 */
+  /* ./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, 10517);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10984);
   }
-  /* ./parser//parser.nit:10519 */
+  /* ./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, 10519);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10986);
   }
-  /* ./parser//parser.nit:10521 */
+  /* ./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, 10521);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10988);
   }
-  /* ./parser//parser.nit:10523 */
+  /* ./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, 10523);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10990);
   }
-  /* ./parser//parser.nit:10524 */
+  /* ./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:10530 */
+  /* ./parser//parser.nit:10997 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10531 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction352____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10531);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10998);
   }
-  REGB0 = ATTR_parser___ReduceAction352____goto(fra.me.REG[0]);
+  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___ReduceAction352___init(val_t p0, val_t p1, int* init_table){
-  int itpos325 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction352].i;
+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[itpos325]) return;
+  if (init_table[itpos341]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10534;
-  fra.me.meth = LOCATE_parser___ReduceAction352___init;
+  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:10534 */
+  /* ./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___ReduceAction352____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction369____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos325] = 1;
+  init_table[itpos341] = 1;
   return;
 }
-void parser___ReduceAction353___action(val_t p0, val_t p1){
+void parser___ReduceAction370___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10538;
-  fra.me.meth = LOCATE_parser___ReduceAction353___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;
@@ -35245,30 +36812,30 @@ void parser___ReduceAction353___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:10540 */
+  /* ./parser//parser.nit:11007 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10541 */
+  /* ./parser//parser.nit:11008 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10542 */
+  /* ./parser//parser.nit:11009 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10543 */
+  /* ./parser//parser.nit:11010 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10545 */
+  /* ./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, 10545);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11012);
   }
-  /* ./parser//parser.nit:10547 */
+  /* ./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, 10547);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11014);
   }
-  /* ./parser//parser.nit:10548 */
+  /* ./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:10549 */
+  /* ./parser//parser.nit:11016 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -35283,58 +36850,58 @@ void parser___ReduceAction353___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10550 */
+    /* ./parser//parser.nit:11017 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10552 */
+  /* ./parser//parser.nit:11019 */
   fra.me.REG[5] = NEW_ASuperstringExpr_parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[5]);
-  /* ./parser//parser.nit:10555 */
+  /* ./parser//parser.nit:11022 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10556 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction353____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, 10556);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11023);
   }
-  REGB0 = ATTR_parser___ReduceAction353____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___ReduceAction353___init(val_t p0, val_t p1, int* init_table){
-  int itpos326 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction353].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[itpos326]) 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 = 10559;
-  fra.me.meth = LOCATE_parser___ReduceAction353___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:10559 */
+  /* ./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___ReduceAction353____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction370____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos326] = 1;
+  init_table[itpos342] = 1;
   return;
 }
-void parser___ReduceAction354___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 = 10563;
-  fra.me.meth = LOCATE_parser___ReduceAction354___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;
@@ -35346,41 +36913,41 @@ void parser___ReduceAction354___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:10565 */
+  /* ./parser//parser.nit:11032 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10566 */
+  /* ./parser//parser.nit:11033 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10567 */
+  /* ./parser//parser.nit:11034 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10568 */
+  /* ./parser//parser.nit:11035 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10569 */
+  /* ./parser//parser.nit:11036 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10571 */
+  /* ./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, 10571);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11038);
   }
-  /* ./parser//parser.nit:10573 */
+  /* ./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, 10573);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11040);
   }
-  /* ./parser//parser.nit:10575 */
+  /* ./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, 10575);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11042);
   }
-  /* ./parser//parser.nit:10576 */
+  /* ./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:10577 */
+  /* ./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:10578 */
+  /* ./parser//parser.nit:11045 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -35395,58 +36962,58 @@ void parser___ReduceAction354___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10579 */
+    /* ./parser//parser.nit:11046 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10581 */
+  /* ./parser//parser.nit:11048 */
   fra.me.REG[6] = NEW_ASuperstringExpr_parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[6]);
-  /* ./parser//parser.nit:10584 */
+  /* ./parser//parser.nit:11051 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:10585 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction354____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, 10585);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11052);
   }
-  REGB0 = ATTR_parser___ReduceAction354____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___ReduceAction354___init(val_t p0, val_t p1, int* init_table){
-  int itpos327 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction354].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[itpos327]) 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 = 10588;
-  fra.me.meth = LOCATE_parser___ReduceAction354___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:10588 */
+  /* ./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___ReduceAction354____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction371____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos327] = 1;
+  init_table[itpos343] = 1;
   return;
 }
-void parser___ReduceAction355___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 = 10592;
-  fra.me.meth = LOCATE_parser___ReduceAction355___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;
@@ -35457,19 +37024,19 @@ 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:10594 */
+  /* ./parser//parser.nit:11061 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10595 */
+  /* ./parser//parser.nit:11062 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10596 */
+  /* ./parser//parser.nit:11063 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10597 */
+  /* ./parser//parser.nit:11064 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10598 */
+  /* ./parser//parser.nit:11065 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10599 */
+  /* ./parser//parser.nit:11066 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10602 */
+  /* ./parser//parser.nit:11069 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -35484,10 +37051,10 @@ void parser___ReduceAction355___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10603 */
+    /* ./parser//parser.nit:11070 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:10605 */
+  /* ./parser//parser.nit:11072 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -35502,55 +37069,55 @@ void parser___ReduceAction355___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10606 */
+    /* ./parser//parser.nit:11073 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10608 */
+  /* ./parser//parser.nit:11075 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10609 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction355____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, 10609);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11076);
   }
-  REGB0 = ATTR_parser___ReduceAction355____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___ReduceAction355___init(val_t p0, val_t p1, int* init_table){
-  int itpos328 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction355].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[itpos328]) 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 = 10612;
-  fra.me.meth = LOCATE_parser___ReduceAction355___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:10612 */
+  /* ./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___ReduceAction355____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction372____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos328] = 1;
+  init_table[itpos344] = 1;
   return;
 }
-void parser___ReduceAction356___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 = 10616;
-  fra.me.meth = LOCATE_parser___ReduceAction356___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;
@@ -35559,64 +37126,64 @@ void parser___ReduceAction356___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:10618 */
+  /* ./parser//parser.nit:11085 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10619 */
+  /* ./parser//parser.nit:11086 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10621 */
+  /* ./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, 10621);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11088);
   }
-  /* ./parser//parser.nit:10622 */
+  /* ./parser//parser.nit:11089 */
   fra.me.REG[3] = NEW_AStartStringExpr_parser_prod___AStartStringExpr___init_astartstringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10625 */
+  /* ./parser//parser.nit:11092 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10626 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction356____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, 10626);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11093);
   }
-  REGB0 = ATTR_parser___ReduceAction356____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___ReduceAction356___init(val_t p0, val_t p1, int* init_table){
-  int itpos329 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction356].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[itpos329]) 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 = 10629;
-  fra.me.meth = LOCATE_parser___ReduceAction356___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:10629 */
+  /* ./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___ReduceAction356____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction373____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos329] = 1;
+  init_table[itpos345] = 1;
   return;
 }
-void parser___ReduceAction358___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 = 10633;
-  fra.me.meth = LOCATE_parser___ReduceAction358___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;
@@ -35625,64 +37192,64 @@ 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:10635 */
+  /* ./parser//parser.nit:11102 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10636 */
+  /* ./parser//parser.nit:11103 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10638 */
+  /* ./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, 10638);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11105);
   }
-  /* ./parser//parser.nit:10639 */
+  /* ./parser//parser.nit:11106 */
   fra.me.REG[3] = NEW_AMidStringExpr_parser_prod___AMidStringExpr___init_amidstringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10642 */
+  /* ./parser//parser.nit:11109 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10643 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction358____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, 10643);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11110);
   }
-  REGB0 = ATTR_parser___ReduceAction358____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___ReduceAction358___init(val_t p0, val_t p1, int* init_table){
-  int itpos330 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction358].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[itpos330]) 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 = 10646;
-  fra.me.meth = LOCATE_parser___ReduceAction358___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:10646 */
+  /* ./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___ReduceAction358____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction375____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos330] = 1;
+  init_table[itpos346] = 1;
   return;
 }
-void parser___ReduceAction359___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 = 10650;
-  fra.me.meth = LOCATE_parser___ReduceAction359___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;
@@ -35691,65 +37258,65 @@ 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:10652 */
+  /* ./parser//parser.nit:11119 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10653 */
+  /* ./parser//parser.nit:11120 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10655 */
+  /* ./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, 10655);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11122);
   }
-  /* ./parser//parser.nit:10656 */
+  /* ./parser//parser.nit:11123 */
   fra.me.REG[3] = NEW_AEndStringExpr_parser_prod___AEndStringExpr___init_aendstringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10659 */
+  /* ./parser//parser.nit:11126 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10660 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction359____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, 10660);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11127);
   }
-  REGB0 = ATTR_parser___ReduceAction359____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___ReduceAction359___init(val_t p0, val_t p1, int* init_table){
-  int itpos331 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction359].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[itpos331]) 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 = 10663;
-  fra.me.meth = LOCATE_parser___ReduceAction359___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:10663 */
+  /* ./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___ReduceAction359____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction376____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos331] = 1;
+  init_table[itpos347] = 1;
   return;
 }
-void parser___ReduceAction360___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 = 10667;
-  fra.me.meth = LOCATE_parser___ReduceAction360___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;
@@ -35759,21 +37326,21 @@ void parser___ReduceAction360___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:10669 */
+  /* ./parser//parser.nit:11136 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10670 */
+  /* ./parser//parser.nit:11137 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10671 */
+  /* ./parser//parser.nit:11138 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10672 */
+  /* ./parser//parser.nit:11139 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10673 */
+  /* ./parser//parser.nit:11140 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10674 */
+  /* ./parser//parser.nit:11141 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10675 */
+  /* ./parser//parser.nit:11142 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10677 */
+  /* ./parser//parser.nit:11144 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -35788,56 +37355,56 @@ void parser___ReduceAction360___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10678 */
+    /* ./parser//parser.nit:11145 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10680 */
+  /* ./parser//parser.nit:11147 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10681 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction360____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, 10681);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11148);
   }
-  REGB0 = ATTR_parser___ReduceAction360____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___ReduceAction360___init(val_t p0, val_t p1, int* init_table){
-  int itpos332 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction360].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[itpos332]) 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 = 10684;
-  fra.me.meth = LOCATE_parser___ReduceAction360___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:10684 */
+  /* ./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___ReduceAction360____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction377____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos332] = 1;
+  init_table[itpos348] = 1;
   return;
 }
-void parser___ReduceAction361___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 = 10688;
-  fra.me.meth = LOCATE_parser___ReduceAction361___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;
@@ -35848,29 +37415,29 @@ void parser___ReduceAction361___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:10690 */
+  /* ./parser//parser.nit:11157 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10691 */
+  /* ./parser//parser.nit:11158 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10692 */
+  /* ./parser//parser.nit:11159 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10693 */
+  /* ./parser//parser.nit:11160 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10694 */
+  /* ./parser//parser.nit:11161 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10695 */
+  /* ./parser//parser.nit:11162 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10696 */
+  /* ./parser//parser.nit:11163 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10697 */
+  /* ./parser//parser.nit:11164 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10700 */
+  /* ./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, 10700);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11167);
   }
-  /* ./parser//parser.nit:10701 */
+  /* ./parser//parser.nit:11168 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -35885,58 +37452,58 @@ void parser___ReduceAction361___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10702 */
+    /* ./parser//parser.nit:11169 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:10704 */
+  /* ./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:10705 */
+  /* ./parser//parser.nit:11172 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10706 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction361____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, 10706);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11173);
   }
-  REGB0 = ATTR_parser___ReduceAction361____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___ReduceAction361___init(val_t p0, val_t p1, int* init_table){
-  int itpos333 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction361].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[itpos333]) 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 = 10709;
-  fra.me.meth = LOCATE_parser___ReduceAction361___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:10709 */
+  /* ./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___ReduceAction361____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction378____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos333] = 1;
+  init_table[itpos349] = 1;
   return;
 }
-void parser___ReduceAction363___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 = 10713;
-  fra.me.meth = LOCATE_parser___ReduceAction363___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;
@@ -35945,57 +37512,57 @@ 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:10715 */
+  /* ./parser//parser.nit:11182 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10716 */
+  /* ./parser//parser.nit:11183 */
   fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10717 */
+  /* ./parser//parser.nit:11184 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10718 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction363____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, 10718);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11185);
   }
-  REGB0 = ATTR_parser___ReduceAction363____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___ReduceAction363___init(val_t p0, val_t p1, int* init_table){
-  int itpos334 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction363].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[itpos334]) 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 = 10721;
-  fra.me.meth = LOCATE_parser___ReduceAction363___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:10721 */
+  /* ./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___ReduceAction363____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction380____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos334] = 1;
+  init_table[itpos350] = 1;
   return;
 }
-void parser___ReduceAction366___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 = 10725;
-  fra.me.meth = LOCATE_parser___ReduceAction366___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;
@@ -36005,13 +37572,13 @@ void parser___ReduceAction366___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:10727 */
+  /* ./parser//parser.nit:11194 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10728 */
+  /* ./parser//parser.nit:11195 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10729 */
+  /* ./parser//parser.nit:11196 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10731 */
+  /* ./parser//parser.nit:11198 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36026,55 +37593,55 @@ void parser___ReduceAction366___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10732 */
+    /* ./parser//parser.nit:11199 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10734 */
+  /* ./parser//parser.nit:11201 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10735 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction366____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, 10735);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11202);
   }
-  REGB0 = ATTR_parser___ReduceAction366____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___ReduceAction366___init(val_t p0, val_t p1, int* init_table){
-  int itpos335 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction366].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[itpos335]) return;
+  if (init_table[itpos351]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10738;
-  fra.me.meth = LOCATE_parser___ReduceAction366___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:10738 */
+  /* ./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___ReduceAction366____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction383____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos335] = 1;
+  init_table[itpos351] = 1;
   return;
 }
-void parser___ReduceAction371___action(val_t p0, val_t p1){
+void parser___ReduceAction388___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10742;
-  fra.me.meth = LOCATE_parser___ReduceAction371___action;
+  fra.me.line = 11209;
+  fra.me.meth = LOCATE_parser___ReduceAction388___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -36084,62 +37651,62 @@ void parser___ReduceAction371___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:10744 */
+  /* ./parser//parser.nit:11211 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10745 */
+  /* ./parser//parser.nit:11212 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10746 */
+  /* ./parser//parser.nit:11213 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10747 */
+  /* ./parser//parser.nit:11214 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10748 */
+  /* ./parser//parser.nit:11215 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10750 */
+  /* ./parser//parser.nit:11217 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10751 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction371____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11218 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction388____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10751);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11218);
   }
-  REGB0 = ATTR_parser___ReduceAction371____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction388____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos336 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction371].i;
+void parser___ReduceAction388___init(val_t p0, val_t p1, int* init_table){
+  int itpos352 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction388].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos336]) return;
+  if (init_table[itpos352]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10754;
-  fra.me.meth = LOCATE_parser___ReduceAction371___init;
+  fra.me.line = 11221;
+  fra.me.meth = LOCATE_parser___ReduceAction388___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10754 */
+  /* ./parser//parser.nit:11221 */
   fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction371____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction388____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos336] = 1;
+  init_table[itpos352] = 1;
   return;
 }
-void parser___ReduceAction372___action(val_t p0, val_t p1){
+void parser___ReduceAction389___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10758;
-  fra.me.meth = LOCATE_parser___ReduceAction372___action;
+  fra.me.line = 11225;
+  fra.me.meth = LOCATE_parser___ReduceAction389___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -36149,71 +37716,71 @@ void parser___ReduceAction372___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:10760 */
+  /* ./parser//parser.nit:11227 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10761 */
+  /* ./parser//parser.nit:11228 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10762 */
+  /* ./parser//parser.nit:11229 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10763 */
+  /* ./parser//parser.nit:11230 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10764 */
+  /* ./parser//parser.nit:11231 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10766 */
+  /* ./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, 10766);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11233);
   }
-  /* ./parser//parser.nit:10767 */
+  /* ./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:10768 */
+  /* ./parser//parser.nit:11235 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10769 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction372____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10769);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11236);
   }
-  REGB0 = ATTR_parser___ReduceAction372____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction389____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos337 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction372].i;
+void parser___ReduceAction389___init(val_t p0, val_t p1, int* init_table){
+  int itpos353 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction389].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos337]) return;
+  if (init_table[itpos353]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10772;
-  fra.me.meth = LOCATE_parser___ReduceAction372___init;
+  fra.me.line = 11239;
+  fra.me.meth = LOCATE_parser___ReduceAction389___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10772 */
+  /* ./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___ReduceAction372____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction389____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos337] = 1;
+  init_table[itpos353] = 1;
   return;
 }
-void parser___ReduceAction373___action(val_t p0, val_t p1){
+void parser___ReduceAction390___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10776;
-  fra.me.meth = LOCATE_parser___ReduceAction373___action;
+  fra.me.line = 11243;
+  fra.me.meth = LOCATE_parser___ReduceAction390___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -36223,68 +37790,68 @@ void parser___ReduceAction373___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10778 */
+  /* ./parser//parser.nit:11245 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10779 */
+  /* ./parser//parser.nit:11246 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10780 */
+  /* ./parser//parser.nit:11247 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10782 */
+  /* ./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 {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10782);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11249);
   }
-  /* ./parser//parser.nit:10783 */
+  /* ./parser//parser.nit:11250 */
   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:10784 */
+  /* ./parser//parser.nit:11251 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10785 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction373____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10785);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11252);
   }
-  REGB0 = ATTR_parser___ReduceAction373____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction390____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction373___init(val_t p0, val_t p1, int* init_table){
-  int itpos338 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction373].i;
+void parser___ReduceAction390___init(val_t p0, val_t p1, int* init_table){
+  int itpos354 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction390].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos338]) return;
+  if (init_table[itpos354]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10788;
-  fra.me.meth = LOCATE_parser___ReduceAction373___init;
+  fra.me.line = 11255;
+  fra.me.meth = LOCATE_parser___ReduceAction390___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10788 */
+  /* ./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___ReduceAction373____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction390____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos338] = 1;
+  init_table[itpos354] = 1;
   return;
 }
-void parser___ReduceAction374___action(val_t p0, val_t p1){
+void parser___ReduceAction391___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10792;
-  fra.me.meth = LOCATE_parser___ReduceAction374___action;
+  fra.me.line = 11259;
+  fra.me.meth = LOCATE_parser___ReduceAction391___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -36294,13 +37861,13 @@ void parser___ReduceAction374___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:10794 */
+  /* ./parser//parser.nit:11261 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10795 */
+  /* ./parser//parser.nit:11262 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10796 */
+  /* ./parser//parser.nit:11263 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10798 */
+  /* ./parser//parser.nit:11265 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36315,56 +37882,56 @@ void parser___ReduceAction374___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10799 */
+    /* ./parser//parser.nit:11266 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10801 */
+  /* ./parser//parser.nit:11268 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10802 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction374____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10802);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11269);
   }
-  REGB0 = ATTR_parser___ReduceAction374____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction391____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos339 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction374].i;
+void parser___ReduceAction391___init(val_t p0, val_t p1, int* init_table){
+  int itpos355 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction391].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos339]) return;
+  if (init_table[itpos355]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10805;
-  fra.me.meth = LOCATE_parser___ReduceAction374___init;
+  fra.me.line = 11272;
+  fra.me.meth = LOCATE_parser___ReduceAction391___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10805 */
+  /* ./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___ReduceAction374____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction391____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos339] = 1;
+  init_table[itpos355] = 1;
   return;
 }
-void parser___ReduceAction375___action(val_t p0, val_t p1){
+void parser___ReduceAction392___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10809;
-  fra.me.meth = LOCATE_parser___ReduceAction375___action;
+  fra.me.line = 11276;
+  fra.me.meth = LOCATE_parser___ReduceAction392___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -36375,30 +37942,30 @@ void parser___ReduceAction375___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:10811 */
+  /* ./parser//parser.nit:11278 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10812 */
+  /* ./parser//parser.nit:11279 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10813 */
+  /* ./parser//parser.nit:11280 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10814 */
+  /* ./parser//parser.nit:11281 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10815 */
+  /* ./parser//parser.nit:11282 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10816 */
+  /* ./parser//parser.nit:11283 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10817 */
+  /* ./parser//parser.nit:11284 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10819 */
+  /* ./parser//parser.nit:11286 */
   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, 10819);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11286);
   }
-  /* ./parser//parser.nit:10821 */
+  /* ./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:10822 */
+  /* ./parser//parser.nit:11289 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36413,55 +37980,55 @@ void parser___ReduceAction375___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10823 */
+    /* ./parser//parser.nit:11290 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10825 */
+  /* ./parser//parser.nit:11292 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10826 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction375____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11293 */
+  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, 10826);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11293);
   }
-  REGB0 = ATTR_parser___ReduceAction375____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction392____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos340 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction375].i;
+void parser___ReduceAction392___init(val_t p0, val_t p1, int* init_table){
+  int itpos356 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction392].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos340]) return;
+  if (init_table[itpos356]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10829;
-  fra.me.meth = LOCATE_parser___ReduceAction375___init;
+  fra.me.line = 11296;
+  fra.me.meth = LOCATE_parser___ReduceAction392___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10829 */
+  /* ./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___ReduceAction375____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction392____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos340] = 1;
+  init_table[itpos356] = 1;
   return;
 }
-void parser___ReduceAction376___action(val_t p0, val_t p1){
+void parser___ReduceAction393___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10833;
-  fra.me.meth = LOCATE_parser___ReduceAction376___action;
+  fra.me.line = 11300;
+  fra.me.meth = LOCATE_parser___ReduceAction393___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -36471,66 +38038,66 @@ 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:10835 */
+  /* ./parser//parser.nit:11302 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10836 */
+  /* ./parser//parser.nit:11303 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10837 */
+  /* ./parser//parser.nit:11304 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10839 */
+  /* ./parser//parser.nit:11306 */
   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, 10839);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11306);
   }
-  /* ./parser//parser.nit:10840 */
+  /* ./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:10844 */
+  /* ./parser//parser.nit:11311 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10845 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction376____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10845);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11312);
   }
-  REGB0 = ATTR_parser___ReduceAction376____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction393____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos341 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction376].i;
+void parser___ReduceAction393___init(val_t p0, val_t p1, int* init_table){
+  int itpos357 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction393].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos341]) return;
+  if (init_table[itpos357]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10848;
-  fra.me.meth = LOCATE_parser___ReduceAction376___init;
+  fra.me.line = 11315;
+  fra.me.meth = LOCATE_parser___ReduceAction393___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10848 */
+  /* ./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___ReduceAction376____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction393____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos341] = 1;
+  init_table[itpos357] = 1;
   return;
 }
-void parser___ReduceAction377___action(val_t p0, val_t p1){
+void parser___ReduceAction394___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10852;
-  fra.me.meth = LOCATE_parser___ReduceAction377___action;
+  fra.me.line = 11319;
+  fra.me.meth = LOCATE_parser___ReduceAction394___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -36541,77 +38108,77 @@ 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:10854 */
+  /* ./parser//parser.nit:11321 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10855 */
+  /* ./parser//parser.nit:11322 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10856 */
+  /* ./parser//parser.nit:11323 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10857 */
+  /* ./parser//parser.nit:11324 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10859 */
+  /* ./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, 10859);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11326);
   }
-  /* ./parser//parser.nit:10860 */
+  /* ./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:10862 */
+  /* ./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, 10862);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11329);
   }
-  /* ./parser//parser.nit:10863 */
+  /* ./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:10867 */
+  /* ./parser//parser.nit:11334 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10868 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction377____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10868);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11335);
   }
-  REGB0 = ATTR_parser___ReduceAction377____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction394____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos342 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction377].i;
+void parser___ReduceAction394___init(val_t p0, val_t p1, int* init_table){
+  int itpos358 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction394].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos342]) return;
+  if (init_table[itpos358]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10871;
-  fra.me.meth = LOCATE_parser___ReduceAction377___init;
+  fra.me.line = 11338;
+  fra.me.meth = LOCATE_parser___ReduceAction394___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10871 */
+  /* ./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___ReduceAction377____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction394____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos342] = 1;
+  init_table[itpos358] = 1;
   return;
 }
-void parser___ReduceAction378___action(val_t p0, val_t p1){
+void parser___ReduceAction395___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10875;
-  fra.me.meth = LOCATE_parser___ReduceAction378___action;
+  fra.me.line = 11342;
+  fra.me.meth = LOCATE_parser___ReduceAction395___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -36621,69 +38188,69 @@ void parser___ReduceAction378___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10877 */
+  /* ./parser//parser.nit:11344 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10878 */
+  /* ./parser//parser.nit:11345 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10879 */
+  /* ./parser//parser.nit:11346 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10881 */
+  /* ./parser//parser.nit:11348 */
   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, 10881);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11348);
   }
-  /* ./parser//parser.nit:10882 */
+  /* ./parser//parser.nit:11349 */
   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:10883 */
+  /* ./parser//parser.nit:11350 */
   fra.me.REG[4] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[4], NIT_NULL);
-  /* ./parser//parser.nit:10887 */
+  /* ./parser//parser.nit:11354 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10888 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction378____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10888);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11355);
   }
-  REGB0 = ATTR_parser___ReduceAction378____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction395____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction378___init(val_t p0, val_t p1, int* init_table){
-  int itpos343 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction378].i;
+void parser___ReduceAction395___init(val_t p0, val_t p1, int* init_table){
+  int itpos359 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction395].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos343]) return;
+  if (init_table[itpos359]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10891;
-  fra.me.meth = LOCATE_parser___ReduceAction378___init;
+  fra.me.line = 11358;
+  fra.me.meth = LOCATE_parser___ReduceAction395___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10891 */
+  /* ./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___ReduceAction378____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction395____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos343] = 1;
+  init_table[itpos359] = 1;
   return;
 }
-void parser___ReduceAction379___action(val_t p0, val_t p1){
+void parser___ReduceAction396___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10895;
-  fra.me.meth = LOCATE_parser___ReduceAction379___action;
+  fra.me.line = 11362;
+  fra.me.meth = LOCATE_parser___ReduceAction396___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -36692,60 +38259,60 @@ 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:10897 */
+  /* ./parser//parser.nit:11364 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10898 */
+  /* ./parser//parser.nit:11365 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10899 */
+  /* ./parser//parser.nit:11366 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10900 */
+  /* ./parser//parser.nit:11367 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10902 */
+  /* ./parser//parser.nit:11369 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10903 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction379____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10903);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11370);
   }
-  REGB0 = ATTR_parser___ReduceAction379____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction396____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos344 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction379].i;
+void parser___ReduceAction396___init(val_t p0, val_t p1, int* init_table){
+  int itpos360 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction396].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos344]) return;
+  if (init_table[itpos360]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10906;
-  fra.me.meth = LOCATE_parser___ReduceAction379___init;
+  fra.me.line = 11373;
+  fra.me.meth = LOCATE_parser___ReduceAction396___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10906 */
+  /* ./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___ReduceAction379____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction396____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos344] = 1;
+  init_table[itpos360] = 1;
   return;
 }
-void parser___ReduceAction380___action(val_t p0, val_t p1){
+void parser___ReduceAction397___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 = 10910;
-  fra.me.meth = LOCATE_parser___ReduceAction380___action;
+  fra.me.line = 11377;
+  fra.me.meth = LOCATE_parser___ReduceAction397___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -36754,60 +38321,60 @@ void parser___ReduceAction380___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:10912 */
+  /* ./parser//parser.nit:11379 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10913 */
+  /* ./parser//parser.nit:11380 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10914 */
+  /* ./parser//parser.nit:11381 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10915 */
+  /* ./parser//parser.nit:11382 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10917 */
+  /* ./parser//parser.nit:11384 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10918 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction380____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10918);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11385);
   }
-  REGB0 = ATTR_parser___ReduceAction380____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction397____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction380___init(val_t p0, val_t p1, int* init_table){
-  int itpos345 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction380].i;
+void parser___ReduceAction397___init(val_t p0, val_t p1, int* init_table){
+  int itpos361 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction397].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos345]) return;
+  if (init_table[itpos361]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10921;
-  fra.me.meth = LOCATE_parser___ReduceAction380___init;
+  fra.me.line = 11388;
+  fra.me.meth = LOCATE_parser___ReduceAction397___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10921 */
+  /* ./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___ReduceAction380____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction397____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos345] = 1;
+  init_table[itpos361] = 1;
   return;
 }
-void parser___ReduceAction381___action(val_t p0, val_t p1){
+void parser___ReduceAction398___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10925;
-  fra.me.meth = LOCATE_parser___ReduceAction381___action;
+  fra.me.line = 11392;
+  fra.me.meth = LOCATE_parser___ReduceAction398___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -36816,54 +38383,54 @@ void parser___ReduceAction381___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:10927 */
+  /* ./parser//parser.nit:11394 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10928 */
+  /* ./parser//parser.nit:11395 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10929 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction381____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11396 */
+  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, 10929);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11396);
   }
-  REGB0 = ATTR_parser___ReduceAction381____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___ReduceAction381___init(val_t p0, val_t p1, int* init_table){
-  int itpos346 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction381].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[itpos346]) return;
+  if (init_table[itpos362]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10932;
-  fra.me.meth = LOCATE_parser___ReduceAction381___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:10932 */
+  /* ./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___ReduceAction381____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction398____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos346] = 1;
+  init_table[itpos362] = 1;
   return;
 }
-void parser___ReduceAction383___action(val_t p0, val_t p1){
+void parser___ReduceAction400___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10936;
-  fra.me.meth = LOCATE_parser___ReduceAction383___action;
+  fra.me.line = 11403;
+  fra.me.meth = LOCATE_parser___ReduceAction400___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -36873,69 +38440,69 @@ void parser___ReduceAction383___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:10938 */
+  /* ./parser//parser.nit:11405 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10939 */
+  /* ./parser//parser.nit:11406 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10940 */
+  /* ./parser//parser.nit:11407 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10942 */
+  /* ./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, 10942);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11409);
   }
-  /* ./parser//parser.nit:10943 */
+  /* ./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:10944 */
+  /* ./parser//parser.nit:11411 */
   fra.me.REG[4] = NEW_ADoc_parser_prod___ADoc___init_adoc(fra.me.REG[4]);
-  /* ./parser//parser.nit:10947 */
+  /* ./parser//parser.nit:11414 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10948 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction383____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10948);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11415);
   }
-  REGB0 = ATTR_parser___ReduceAction383____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction400____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction383___init(val_t p0, val_t p1, int* init_table){
-  int itpos347 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction383].i;
+void parser___ReduceAction400___init(val_t p0, val_t p1, int* init_table){
+  int itpos363 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction400].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos347]) return;
+  if (init_table[itpos363]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10951;
-  fra.me.meth = LOCATE_parser___ReduceAction383___init;
+  fra.me.line = 11418;
+  fra.me.meth = LOCATE_parser___ReduceAction400___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10951 */
+  /* ./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___ReduceAction383____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction400____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos347] = 1;
+  init_table[itpos363] = 1;
   return;
 }
-void parser___ReduceAction384___action(val_t p0, val_t p1){
+void parser___ReduceAction401___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10955;
-  fra.me.meth = LOCATE_parser___ReduceAction384___action;
+  fra.me.line = 11422;
+  fra.me.meth = LOCATE_parser___ReduceAction401___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -36945,71 +38512,71 @@ void parser___ReduceAction384___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:10957 */
+  /* ./parser//parser.nit:11424 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10958 */
+  /* ./parser//parser.nit:11425 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10959 */
+  /* ./parser//parser.nit:11426 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10960 */
+  /* ./parser//parser.nit:11427 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10962 */
+  /* ./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, 10962);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11429);
   }
-  /* ./parser//parser.nit:10963 */
+  /* ./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:10964 */
+  /* ./parser//parser.nit:11431 */
   fra.me.REG[4] = NEW_ADoc_parser_prod___ADoc___init_adoc(fra.me.REG[4]);
-  /* ./parser//parser.nit:10967 */
+  /* ./parser//parser.nit:11434 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10968 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction384____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10968);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11435);
   }
-  REGB0 = ATTR_parser___ReduceAction384____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___ReduceAction384___init(val_t p0, val_t p1, int* init_table){
-  int itpos348 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction384].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[itpos348]) return;
+  if (init_table[itpos364]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10971;
-  fra.me.meth = LOCATE_parser___ReduceAction384___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:10971 */
+  /* ./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___ReduceAction384____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction401____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos348] = 1;
+  init_table[itpos364] = 1;
   return;
 }
-void parser___ReduceAction386___action(val_t p0, val_t p1){
+void parser___ReduceAction403___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10975;
-  fra.me.meth = LOCATE_parser___ReduceAction386___action;
+  fra.me.line = 11442;
+  fra.me.meth = LOCATE_parser___ReduceAction403___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -37017,54 +38584,54 @@ void parser___ReduceAction386___action(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10977 */
+  /* ./parser//parser.nit:11444 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10978 */
+  /* ./parser//parser.nit:11445 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10979 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction386____goto(fra.me.REG[0])!=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, 10979);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11446);
   }
-  REGB0 = ATTR_parser___ReduceAction386____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction403____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction386___init(val_t p0, val_t p1, int* init_table){
-  int itpos349 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction386].i;
+void parser___ReduceAction403___init(val_t p0, val_t p1, int* init_table){
+  int itpos365 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction403].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos349]) return;
+  if (init_table[itpos365]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10982;
-  fra.me.meth = LOCATE_parser___ReduceAction386___init;
+  fra.me.line = 11449;
+  fra.me.meth = LOCATE_parser___ReduceAction403___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10982 */
+  /* ./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___ReduceAction386____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction403____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos349] = 1;
+  init_table[itpos365] = 1;
   return;
 }
-void parser___ReduceAction387___action(val_t p0, val_t p1){
+void parser___ReduceAction404___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10986;
-  fra.me.meth = LOCATE_parser___ReduceAction387___action;
+  fra.me.line = 11453;
+  fra.me.meth = LOCATE_parser___ReduceAction404___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -37073,56 +38640,56 @@ void parser___ReduceAction387___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:10988 */
+  /* ./parser//parser.nit:11455 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10989 */
+  /* ./parser//parser.nit:11456 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10991 */
+  /* ./parser//parser.nit:11458 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10992 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction387____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 10992);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11459);
   }
-  REGB0 = ATTR_parser___ReduceAction387____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction404____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos350 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction387].i;
+void parser___ReduceAction404___init(val_t p0, val_t p1, int* init_table){
+  int itpos366 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction404].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos350]) return;
+  if (init_table[itpos366]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10995;
-  fra.me.meth = LOCATE_parser___ReduceAction387___init;
+  fra.me.line = 11462;
+  fra.me.meth = LOCATE_parser___ReduceAction404___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10995 */
+  /* ./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___ReduceAction387____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction404____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos350] = 1;
+  init_table[itpos366] = 1;
   return;
 }
-void parser___ReduceAction388___action(val_t p0, val_t p1){
+void parser___ReduceAction405___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 = 10999;
-  fra.me.meth = LOCATE_parser___ReduceAction388___action;
+  fra.me.line = 11466;
+  fra.me.meth = LOCATE_parser___ReduceAction405___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -37131,56 +38698,56 @@ void parser___ReduceAction388___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11001 */
+  /* ./parser//parser.nit:11468 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11002 */
+  /* ./parser//parser.nit:11469 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11003 */
+  /* ./parser//parser.nit:11470 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11004 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction388____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11004);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11471);
   }
-  REGB0 = ATTR_parser___ReduceAction388____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction405____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction388___init(val_t p0, val_t p1, int* init_table){
-  int itpos351 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction388].i;
+void parser___ReduceAction405___init(val_t p0, val_t p1, int* init_table){
+  int itpos367 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction405].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos351]) return;
+  if (init_table[itpos367]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11007;
-  fra.me.meth = LOCATE_parser___ReduceAction388___init;
+  fra.me.line = 11474;
+  fra.me.meth = LOCATE_parser___ReduceAction405___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11007 */
+  /* ./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___ReduceAction388____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction405____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos351] = 1;
+  init_table[itpos367] = 1;
   return;
 }
-void parser___ReduceAction389___action(val_t p0, val_t p1){
+void parser___ReduceAction406___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11011;
-  fra.me.meth = LOCATE_parser___ReduceAction389___action;
+  fra.me.line = 11478;
+  fra.me.meth = LOCATE_parser___ReduceAction406___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -37189,58 +38756,58 @@ void parser___ReduceAction389___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11013 */
+  /* ./parser//parser.nit:11480 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11014 */
+  /* ./parser//parser.nit:11481 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11015 */
+  /* ./parser//parser.nit:11482 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11016 */
+  /* ./parser//parser.nit:11483 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11017 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction389____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:11484 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction406____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11017);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11484);
   }
-  REGB0 = ATTR_parser___ReduceAction389____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___ReduceAction389___init(val_t p0, val_t p1, int* init_table){
-  int itpos352 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction389].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[itpos352]) return;
+  if (init_table[itpos368]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11020;
-  fra.me.meth = LOCATE_parser___ReduceAction389___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:11020 */
+  /* ./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___ReduceAction389____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction406____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos352] = 1;
+  init_table[itpos368] = 1;
   return;
 }
-void parser___ReduceAction637___action(val_t p0, val_t p1){
+void parser___ReduceAction658___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 = 11024;
-  fra.me.meth = LOCATE_parser___ReduceAction637___action;
+  fra.me.line = 11491;
+  fra.me.meth = LOCATE_parser___ReduceAction658___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -37251,80 +38818,80 @@ void parser___ReduceAction637___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:11026 */
+  /* ./parser//parser.nit:11493 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11027 */
+  /* ./parser//parser.nit:11494 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11028 */
+  /* ./parser//parser.nit:11495 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11029 */
+  /* ./parser//parser.nit:11496 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11031 */
+  /* ./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, 11031);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11498);
   }
-  /* ./parser//parser.nit:11033 */
+  /* ./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, 11033);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11500);
   }
-  /* ./parser//parser.nit:11035 */
+  /* ./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, 11035);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11502);
   }
-  /* ./parser//parser.nit:11036 */
+  /* ./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:11041 */
+  /* ./parser//parser.nit:11508 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11042 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction637____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11042);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11509);
   }
-  REGB0 = ATTR_parser___ReduceAction637____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction658____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction637___init(val_t p0, val_t p1, int* init_table){
-  int itpos353 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction637].i;
+void parser___ReduceAction658___init(val_t p0, val_t p1, int* init_table){
+  int itpos369 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction658].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos353]) return;
+  if (init_table[itpos369]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11045;
-  fra.me.meth = LOCATE_parser___ReduceAction637___init;
+  fra.me.line = 11512;
+  fra.me.meth = LOCATE_parser___ReduceAction658___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11045 */
+  /* ./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___ReduceAction637____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction658____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos353] = 1;
+  init_table[itpos369] = 1;
   return;
 }
-void parser___ReduceAction638___action(val_t p0, val_t p1){
+void parser___ReduceAction659___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 = 11049;
-  fra.me.meth = LOCATE_parser___ReduceAction638___action;
+  fra.me.line = 11516;
+  fra.me.meth = LOCATE_parser___ReduceAction659___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -37334,72 +38901,72 @@ void parser___ReduceAction638___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:11051 */
+  /* ./parser//parser.nit:11518 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11052 */
+  /* ./parser//parser.nit:11519 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11053 */
+  /* ./parser//parser.nit:11520 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11055 */
+  /* ./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, 11055);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11522);
   }
-  /* ./parser//parser.nit:11057 */
+  /* ./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, 11057);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11524);
   }
-  /* ./parser//parser.nit:11058 */
+  /* ./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:11062 */
+  /* ./parser//parser.nit:11529 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11063 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction638____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11063);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11530);
   }
-  REGB0 = ATTR_parser___ReduceAction638____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction659____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction638___init(val_t p0, val_t p1, int* init_table){
-  int itpos354 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction638].i;
+void parser___ReduceAction659___init(val_t p0, val_t p1, int* init_table){
+  int itpos370 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction659].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos354]) return;
+  if (init_table[itpos370]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11066;
-  fra.me.meth = LOCATE_parser___ReduceAction638___init;
+  fra.me.line = 11533;
+  fra.me.meth = LOCATE_parser___ReduceAction659___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11066 */
+  /* ./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___ReduceAction638____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction659____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos354] = 1;
+  init_table[itpos370] = 1;
   return;
 }
-void parser___ReduceAction639___action(val_t p0, val_t p1){
+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 = 11070;
-  fra.me.meth = LOCATE_parser___ReduceAction639___action;
+  fra.me.line = 11537;
+  fra.me.meth = LOCATE_parser___ReduceAction660___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -37412,87 +38979,87 @@ void parser___ReduceAction639___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:11072 */
+  /* ./parser//parser.nit:11539 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11073 */
+  /* ./parser//parser.nit:11540 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11074 */
+  /* ./parser//parser.nit:11541 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11075 */
+  /* ./parser//parser.nit:11542 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11076 */
+  /* ./parser//parser.nit:11543 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11077 */
+  /* ./parser//parser.nit:11544 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11079 */
+  /* ./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, 11079);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11546);
   }
-  /* ./parser//parser.nit:11081 */
+  /* ./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, 11081);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11548);
   }
-  /* ./parser//parser.nit:11083 */
+  /* ./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, 11083);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11550);
   }
-  /* ./parser//parser.nit:11084 */
+  /* ./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:11085 */
+  /* ./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:11091 */
+  /* ./parser//parser.nit:11558 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:11092 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction639____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11092);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11559);
   }
-  REGB0 = ATTR_parser___ReduceAction639____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___ReduceAction639___init(val_t p0, val_t p1, int* init_table){
-  int itpos355 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction639].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[itpos355]) return;
+  if (init_table[itpos371]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11095;
-  fra.me.meth = LOCATE_parser___ReduceAction639___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:11095 */
+  /* ./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___ReduceAction639____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction660____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos355] = 1;
+  init_table[itpos371] = 1;
   return;
 }
-void parser___ReduceAction642___action(val_t p0, val_t p1){
+void parser___ReduceAction663___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 11099;
-  fra.me.meth = LOCATE_parser___ReduceAction642___action;
+  fra.me.line = 11566;
+  fra.me.meth = LOCATE_parser___ReduceAction663___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -37504,85 +39071,85 @@ void parser___ReduceAction642___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:11101 */
+  /* ./parser//parser.nit:11568 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11102 */
+  /* ./parser//parser.nit:11569 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11103 */
+  /* ./parser//parser.nit:11570 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11104 */
+  /* ./parser//parser.nit:11571 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11105 */
+  /* ./parser//parser.nit:11572 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11107 */
+  /* ./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, 11107);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11574);
   }
-  /* ./parser//parser.nit:11109 */
+  /* ./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, 11109);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11576);
   }
-  /* ./parser//parser.nit:11111 */
+  /* ./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, 11111);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11578);
   }
-  /* ./parser//parser.nit:11112 */
+  /* ./parser//parser.nit:11579 */
   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:11113 */
+  /* ./parser//parser.nit:11580 */
   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:11118 */
+  /* ./parser//parser.nit:11585 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:11119 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction642____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11119);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11586);
   }
-  REGB0 = ATTR_parser___ReduceAction642____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___ReduceAction642___init(val_t p0, val_t p1, int* init_table){
-  int itpos356 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction642].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[itpos356]) return;
+  if (init_table[itpos372]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11122;
-  fra.me.meth = LOCATE_parser___ReduceAction642___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:11122 */
+  /* ./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___ReduceAction642____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction663____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos356] = 1;
+  init_table[itpos372] = 1;
   return;
 }
-void parser___ReduceAction655___action(val_t p0, val_t p1){
+void parser___ReduceAction676___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 = 11126;
-  fra.me.meth = LOCATE_parser___ReduceAction655___action;
+  fra.me.line = 11593;
+  fra.me.meth = LOCATE_parser___ReduceAction676___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -37591,60 +39158,60 @@ void parser___ReduceAction655___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:11128 */
+  /* ./parser//parser.nit:11595 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11129 */
+  /* ./parser//parser.nit:11596 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11130 */
+  /* ./parser//parser.nit:11597 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11131 */
+  /* ./parser//parser.nit:11598 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11133 */
+  /* ./parser//parser.nit:11600 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11134 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction655____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11134);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11601);
   }
-  REGB0 = ATTR_parser___ReduceAction655____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction676____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction655___init(val_t p0, val_t p1, int* init_table){
-  int itpos357 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction655].i;
+void parser___ReduceAction676___init(val_t p0, val_t p1, int* init_table){
+  int itpos373 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction676].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos357]) return;
+  if (init_table[itpos373]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11137;
-  fra.me.meth = LOCATE_parser___ReduceAction655___init;
+  fra.me.line = 11604;
+  fra.me.meth = LOCATE_parser___ReduceAction676___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11137 */
+  /* ./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___ReduceAction655____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction676____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos357] = 1;
+  init_table[itpos373] = 1;
   return;
 }
-void parser___ReduceAction656___action(val_t p0, val_t p1){
+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 tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11141;
-  fra.me.meth = LOCATE_parser___ReduceAction656___action;
+  fra.me.line = 11608;
+  fra.me.meth = LOCATE_parser___ReduceAction677___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -37653,57 +39220,57 @@ void parser___ReduceAction656___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:11143 */
+  /* ./parser//parser.nit:11610 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11144 */
+  /* ./parser//parser.nit:11611 */
   fra.me.REG[3] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:11146 */
+  /* ./parser//parser.nit:11613 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11147 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction656____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11147);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11614);
   }
-  REGB0 = ATTR_parser___ReduceAction656____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___ReduceAction656___init(val_t p0, val_t p1, int* init_table){
-  int itpos358 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction656].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[itpos358]) return;
+  if (init_table[itpos374]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11150;
-  fra.me.meth = LOCATE_parser___ReduceAction656___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:11150 */
+  /* ./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___ReduceAction656____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction677____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos358] = 1;
+  init_table[itpos374] = 1;
   return;
 }
-void parser___ReduceAction663___action(val_t p0, val_t p1){
+void parser___ReduceAction684___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 = 11154;
-  fra.me.meth = LOCATE_parser___ReduceAction663___action;
+  fra.me.line = 11621;
+  fra.me.meth = LOCATE_parser___ReduceAction684___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -37713,13 +39280,13 @@ void parser___ReduceAction663___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:11156 */
+  /* ./parser//parser.nit:11623 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11157 */
+  /* ./parser//parser.nit:11624 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11158 */
+  /* ./parser//parser.nit:11625 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11160 */
+  /* ./parser//parser.nit:11627 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37734,56 +39301,56 @@ void parser___ReduceAction663___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11161 */
+    /* ./parser//parser.nit:11628 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11163 */
+  /* ./parser//parser.nit:11630 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11164 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction663____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11164);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11631);
   }
-  REGB0 = ATTR_parser___ReduceAction663____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction684____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction663___init(val_t p0, val_t p1, int* init_table){
-  int itpos359 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction663].i;
+void parser___ReduceAction684___init(val_t p0, val_t p1, int* init_table){
+  int itpos375 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction684].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos359]) return;
+  if (init_table[itpos375]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11167;
-  fra.me.meth = LOCATE_parser___ReduceAction663___init;
+  fra.me.line = 11634;
+  fra.me.meth = LOCATE_parser___ReduceAction684___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11167 */
+  /* ./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___ReduceAction663____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction684____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos359] = 1;
+  init_table[itpos375] = 1;
   return;
 }
-void parser___ReduceAction664___action(val_t p0, val_t p1){
+void parser___ReduceAction685___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 = 11171;
-  fra.me.meth = LOCATE_parser___ReduceAction664___action;
+  fra.me.line = 11638;
+  fra.me.meth = LOCATE_parser___ReduceAction685___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -37794,24 +39361,24 @@ void parser___ReduceAction664___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:11173 */
+  /* ./parser//parser.nit:11640 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11174 */
+  /* ./parser//parser.nit:11641 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11175 */
+  /* ./parser//parser.nit:11642 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11176 */
+  /* ./parser//parser.nit:11643 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11178 */
+  /* ./parser//parser.nit:11645 */
   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, 11178);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11645);
   }
-  /* ./parser//parser.nit:11180 */
+  /* ./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:11181 */
+  /* ./parser//parser.nit:11648 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37826,56 +39393,56 @@ void parser___ReduceAction664___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11182 */
+    /* ./parser//parser.nit:11649 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11184 */
+  /* ./parser//parser.nit:11651 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11185 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction664____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11185);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11652);
   }
-  REGB0 = ATTR_parser___ReduceAction664____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction685____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction664___init(val_t p0, val_t p1, int* init_table){
-  int itpos360 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction664].i;
+void parser___ReduceAction685___init(val_t p0, val_t p1, int* init_table){
+  int itpos376 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction685].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos360]) return;
+  if (init_table[itpos376]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11188;
-  fra.me.meth = LOCATE_parser___ReduceAction664___init;
+  fra.me.line = 11655;
+  fra.me.meth = LOCATE_parser___ReduceAction685___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11188 */
+  /* ./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___ReduceAction664____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction685____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos360] = 1;
+  init_table[itpos376] = 1;
   return;
 }
-void parser___ReduceAction665___action(val_t p0, val_t p1){
+void parser___ReduceAction686___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 = 11192;
-  fra.me.meth = LOCATE_parser___ReduceAction665___action;
+  fra.me.line = 11659;
+  fra.me.meth = LOCATE_parser___ReduceAction686___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -37885,13 +39452,13 @@ void parser___ReduceAction665___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:11194 */
+  /* ./parser//parser.nit:11661 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11195 */
+  /* ./parser//parser.nit:11662 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11196 */
+  /* ./parser//parser.nit:11663 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11198 */
+  /* ./parser//parser.nit:11665 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37906,56 +39473,56 @@ void parser___ReduceAction665___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11199 */
+    /* ./parser//parser.nit:11666 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11201 */
+  /* ./parser//parser.nit:11668 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11202 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction665____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11202);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11669);
   }
-  REGB0 = ATTR_parser___ReduceAction665____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction686____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction665___init(val_t p0, val_t p1, int* init_table){
-  int itpos361 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction665].i;
+void parser___ReduceAction686___init(val_t p0, val_t p1, int* init_table){
+  int itpos377 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction686].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos361]) return;
+  if (init_table[itpos377]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11205;
-  fra.me.meth = LOCATE_parser___ReduceAction665___init;
+  fra.me.line = 11672;
+  fra.me.meth = LOCATE_parser___ReduceAction686___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11205 */
+  /* ./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___ReduceAction665____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction686____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos361] = 1;
+  init_table[itpos377] = 1;
   return;
 }
-void parser___ReduceAction666___action(val_t p0, val_t p1){
+void parser___ReduceAction687___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 = 11209;
-  fra.me.meth = LOCATE_parser___ReduceAction666___action;
+  fra.me.line = 11676;
+  fra.me.meth = LOCATE_parser___ReduceAction687___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -37966,24 +39533,24 @@ void parser___ReduceAction666___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:11211 */
+  /* ./parser//parser.nit:11678 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11212 */
+  /* ./parser//parser.nit:11679 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11213 */
+  /* ./parser//parser.nit:11680 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11214 */
+  /* ./parser//parser.nit:11681 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11216 */
+  /* ./parser//parser.nit:11683 */
   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, 11216);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11683);
   }
-  /* ./parser//parser.nit:11218 */
+  /* ./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:11219 */
+  /* ./parser//parser.nit:11686 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37998,56 +39565,56 @@ void parser___ReduceAction666___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11220 */
+    /* ./parser//parser.nit:11687 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11222 */
+  /* ./parser//parser.nit:11689 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11223 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction666____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11223);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11690);
   }
-  REGB0 = ATTR_parser___ReduceAction666____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction687____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction666___init(val_t p0, val_t p1, int* init_table){
-  int itpos362 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction666].i;
+void parser___ReduceAction687___init(val_t p0, val_t p1, int* init_table){
+  int itpos378 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction687].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos362]) return;
+  if (init_table[itpos378]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11226;
-  fra.me.meth = LOCATE_parser___ReduceAction666___init;
+  fra.me.line = 11693;
+  fra.me.meth = LOCATE_parser___ReduceAction687___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11226 */
+  /* ./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___ReduceAction666____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction687____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos362] = 1;
+  init_table[itpos378] = 1;
   return;
 }
-void parser___ReduceAction667___action(val_t p0, val_t p1){
+void parser___ReduceAction688___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 11230;
-  fra.me.meth = LOCATE_parser___ReduceAction667___action;
+  fra.me.line = 11697;
+  fra.me.meth = LOCATE_parser___ReduceAction688___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -38057,13 +39624,13 @@ void parser___ReduceAction667___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:11232 */
+  /* ./parser//parser.nit:11699 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11233 */
+  /* ./parser//parser.nit:11700 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11234 */
+  /* ./parser//parser.nit:11701 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11236 */
+  /* ./parser//parser.nit:11703 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38078,56 +39645,56 @@ void parser___ReduceAction667___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11237 */
+    /* ./parser//parser.nit:11704 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11239 */
+  /* ./parser//parser.nit:11706 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11240 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction667____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11240);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11707);
   }
-  REGB0 = ATTR_parser___ReduceAction667____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction688____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction667___init(val_t p0, val_t p1, int* init_table){
-  int itpos363 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction667].i;
+void parser___ReduceAction688___init(val_t p0, val_t p1, int* init_table){
+  int itpos379 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction688].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos363]) return;
+  if (init_table[itpos379]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11243;
-  fra.me.meth = LOCATE_parser___ReduceAction667___init;
+  fra.me.line = 11710;
+  fra.me.meth = LOCATE_parser___ReduceAction688___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11243 */
+  /* ./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___ReduceAction667____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction688____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos363] = 1;
+  init_table[itpos379] = 1;
   return;
 }
-void parser___ReduceAction668___action(val_t p0, val_t p1){
+void parser___ReduceAction689___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 11247;
-  fra.me.meth = LOCATE_parser___ReduceAction668___action;
+  fra.me.line = 11714;
+  fra.me.meth = LOCATE_parser___ReduceAction689___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -38138,24 +39705,24 @@ void parser___ReduceAction668___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:11249 */
+  /* ./parser//parser.nit:11716 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11250 */
+  /* ./parser//parser.nit:11717 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11251 */
+  /* ./parser//parser.nit:11718 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11252 */
+  /* ./parser//parser.nit:11719 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11254 */
+  /* ./parser//parser.nit:11721 */
   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, 11254);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11721);
   }
-  /* ./parser//parser.nit:11256 */
+  /* ./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:11257 */
+  /* ./parser//parser.nit:11724 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38170,56 +39737,56 @@ void parser___ReduceAction668___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11258 */
+    /* ./parser//parser.nit:11725 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11260 */
+  /* ./parser//parser.nit:11727 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11261 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction668____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11261);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11728);
   }
-  REGB0 = ATTR_parser___ReduceAction668____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction689____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction668___init(val_t p0, val_t p1, int* init_table){
-  int itpos364 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction668].i;
+void parser___ReduceAction689___init(val_t p0, val_t p1, int* init_table){
+  int itpos380 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction689].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos364]) return;
+  if (init_table[itpos380]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11264;
-  fra.me.meth = LOCATE_parser___ReduceAction668___init;
+  fra.me.line = 11731;
+  fra.me.meth = LOCATE_parser___ReduceAction689___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11264 */
+  /* ./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___ReduceAction668____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction689____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos364] = 1;
+  init_table[itpos380] = 1;
   return;
 }
-void parser___ReduceAction669___action(val_t p0, val_t p1){
+void parser___ReduceAction690___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 11268;
-  fra.me.meth = LOCATE_parser___ReduceAction669___action;
+  fra.me.line = 11735;
+  fra.me.meth = LOCATE_parser___ReduceAction690___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -38229,13 +39796,13 @@ void parser___ReduceAction669___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:11270 */
+  /* ./parser//parser.nit:11737 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11271 */
+  /* ./parser//parser.nit:11738 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11272 */
+  /* ./parser//parser.nit:11739 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11274 */
+  /* ./parser//parser.nit:11741 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38250,56 +39817,56 @@ void parser___ReduceAction669___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11275 */
+    /* ./parser//parser.nit:11742 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11277 */
+  /* ./parser//parser.nit:11744 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11278 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction669____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11278);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11745);
   }
-  REGB0 = ATTR_parser___ReduceAction669____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction690____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction669___init(val_t p0, val_t p1, int* init_table){
-  int itpos365 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction669].i;
+void parser___ReduceAction690___init(val_t p0, val_t p1, int* init_table){
+  int itpos381 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction690].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos365]) return;
+  if (init_table[itpos381]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11281;
-  fra.me.meth = LOCATE_parser___ReduceAction669___init;
+  fra.me.line = 11748;
+  fra.me.meth = LOCATE_parser___ReduceAction690___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11281 */
+  /* ./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___ReduceAction669____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction690____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos365] = 1;
+  init_table[itpos381] = 1;
   return;
 }
-void parser___ReduceAction670___action(val_t p0, val_t p1){
+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 = 11285;
-  fra.me.meth = LOCATE_parser___ReduceAction670___action;
+  fra.me.line = 11752;
+  fra.me.meth = LOCATE_parser___ReduceAction691___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -38310,24 +39877,24 @@ void parser___ReduceAction670___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:11287 */
+  /* ./parser//parser.nit:11754 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11288 */
+  /* ./parser//parser.nit:11755 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11289 */
+  /* ./parser//parser.nit:11756 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11290 */
+  /* ./parser//parser.nit:11757 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11292 */
+  /* ./parser//parser.nit:11759 */
   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, 11292);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11759);
   }
-  /* ./parser//parser.nit:11294 */
+  /* ./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:11295 */
+  /* ./parser//parser.nit:11762 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38342,56 +39909,56 @@ void parser___ReduceAction670___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11296 */
+    /* ./parser//parser.nit:11763 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11298 */
+  /* ./parser//parser.nit:11765 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11299 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction670____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11299);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11766);
   }
-  REGB0 = ATTR_parser___ReduceAction670____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___ReduceAction670___init(val_t p0, val_t p1, int* init_table){
-  int itpos366 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction670].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[itpos366]) return;
+  if (init_table[itpos382]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11302;
-  fra.me.meth = LOCATE_parser___ReduceAction670___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:11302 */
+  /* ./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___ReduceAction670____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction691____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos366] = 1;
+  init_table[itpos382] = 1;
   return;
 }
-void parser___ReduceAction673___action(val_t p0, val_t p1){
+void parser___ReduceAction694___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 = 11306;
-  fra.me.meth = LOCATE_parser___ReduceAction673___action;
+  fra.me.line = 11773;
+  fra.me.meth = LOCATE_parser___ReduceAction694___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -38401,13 +39968,13 @@ void parser___ReduceAction673___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:11308 */
+  /* ./parser//parser.nit:11775 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11309 */
+  /* ./parser//parser.nit:11776 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11310 */
+  /* ./parser//parser.nit:11777 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11312 */
+  /* ./parser//parser.nit:11779 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38422,56 +39989,56 @@ void parser___ReduceAction673___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11313 */
+    /* ./parser//parser.nit:11780 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11315 */
+  /* ./parser//parser.nit:11782 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11316 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction673____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11316);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11783);
   }
-  REGB0 = ATTR_parser___ReduceAction673____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction694____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction673___init(val_t p0, val_t p1, int* init_table){
-  int itpos367 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction673].i;
+void parser___ReduceAction694___init(val_t p0, val_t p1, int* init_table){
+  int itpos383 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction694].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos367]) return;
+  if (init_table[itpos383]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11319;
-  fra.me.meth = LOCATE_parser___ReduceAction673___init;
+  fra.me.line = 11786;
+  fra.me.meth = LOCATE_parser___ReduceAction694___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11319 */
+  /* ./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___ReduceAction673____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction694____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos367] = 1;
+  init_table[itpos383] = 1;
   return;
 }
-void parser___ReduceAction674___action(val_t p0, val_t p1){
+void parser___ReduceAction695___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 = 11323;
-  fra.me.meth = LOCATE_parser___ReduceAction674___action;
+  fra.me.line = 11790;
+  fra.me.meth = LOCATE_parser___ReduceAction695___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -38482,24 +40049,24 @@ void parser___ReduceAction674___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:11325 */
+  /* ./parser//parser.nit:11792 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11326 */
+  /* ./parser//parser.nit:11793 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11327 */
+  /* ./parser//parser.nit:11794 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11328 */
+  /* ./parser//parser.nit:11795 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11330 */
+  /* ./parser//parser.nit:11797 */
   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, 11797);
   }
-  /* ./parser//parser.nit:11332 */
+  /* ./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:11333 */
+  /* ./parser//parser.nit:11800 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38514,56 +40081,56 @@ void parser___ReduceAction674___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11334 */
+    /* ./parser//parser.nit:11801 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11336 */
+  /* ./parser//parser.nit:11803 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11337 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction674____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11337);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11804);
   }
-  REGB0 = ATTR_parser___ReduceAction674____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction695____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction674___init(val_t p0, val_t p1, int* init_table){
-  int itpos368 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction674].i;
+void parser___ReduceAction695___init(val_t p0, val_t p1, int* init_table){
+  int itpos384 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction695].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos368]) return;
+  if (init_table[itpos384]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11340;
-  fra.me.meth = LOCATE_parser___ReduceAction674___init;
+  fra.me.line = 11807;
+  fra.me.meth = LOCATE_parser___ReduceAction695___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11340 */
+  /* ./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___ReduceAction674____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction695____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos368] = 1;
+  init_table[itpos384] = 1;
   return;
 }
-void parser___ReduceAction675___action(val_t p0, val_t p1){
+void parser___ReduceAction696___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 = 11344;
-  fra.me.meth = LOCATE_parser___ReduceAction675___action;
+  fra.me.line = 11811;
+  fra.me.meth = LOCATE_parser___ReduceAction696___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -38573,13 +40140,13 @@ void parser___ReduceAction675___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:11346 */
+  /* ./parser//parser.nit:11813 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11347 */
+  /* ./parser//parser.nit:11814 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11348 */
+  /* ./parser//parser.nit:11815 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11350 */
+  /* ./parser//parser.nit:11817 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38594,56 +40161,56 @@ void parser___ReduceAction675___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11351 */
+    /* ./parser//parser.nit:11818 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11353 */
+  /* ./parser//parser.nit:11820 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11354 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction675____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11354);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11821);
   }
-  REGB0 = ATTR_parser___ReduceAction675____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction696____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___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 itpos369 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction675].i;
+void parser___ReduceAction696___init(val_t p0, val_t p1, int* init_table){
+  int itpos385 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction696].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos369]) return;
+  if (init_table[itpos385]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11357;
-  fra.me.meth = LOCATE_parser___ReduceAction675___init;
+  fra.me.line = 11824;
+  fra.me.meth = LOCATE_parser___ReduceAction696___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11357 */
+  /* ./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___ReduceAction675____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction696____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos369] = 1;
+  init_table[itpos385] = 1;
   return;
 }
-void parser___ReduceAction676___action(val_t p0, val_t p1){
+void parser___ReduceAction697___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 = 11361;
-  fra.me.meth = LOCATE_parser___ReduceAction676___action;
+  fra.me.line = 11828;
+  fra.me.meth = LOCATE_parser___ReduceAction697___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -38654,24 +40221,24 @@ void parser___ReduceAction676___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:11363 */
+  /* ./parser//parser.nit:11830 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11364 */
+  /* ./parser//parser.nit:11831 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11365 */
+  /* ./parser//parser.nit:11832 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11366 */
+  /* ./parser//parser.nit:11833 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11368 */
+  /* ./parser//parser.nit:11835 */
   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, 11368);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11835);
   }
-  /* ./parser//parser.nit:11370 */
+  /* ./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:11371 */
+  /* ./parser//parser.nit:11838 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38686,56 +40253,56 @@ void parser___ReduceAction676___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11372 */
+    /* ./parser//parser.nit:11839 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11374 */
+  /* ./parser//parser.nit:11841 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11375 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction676____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11375);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11842);
   }
-  REGB0 = ATTR_parser___ReduceAction676____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction697____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction676___init(val_t p0, val_t p1, int* init_table){
-  int itpos370 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction676].i;
+void parser___ReduceAction697___init(val_t p0, val_t p1, int* init_table){
+  int itpos386 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction697].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos370]) return;
+  if (init_table[itpos386]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11378;
-  fra.me.meth = LOCATE_parser___ReduceAction676___init;
+  fra.me.line = 11845;
+  fra.me.meth = LOCATE_parser___ReduceAction697___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11378 */
+  /* ./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___ReduceAction676____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction697____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos370] = 1;
+  init_table[itpos386] = 1;
   return;
 }
-void parser___ReduceAction677___action(val_t p0, val_t p1){
+void parser___ReduceAction698___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 11382;
-  fra.me.meth = LOCATE_parser___ReduceAction677___action;
+  fra.me.line = 11849;
+  fra.me.meth = LOCATE_parser___ReduceAction698___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -38745,13 +40312,13 @@ void parser___ReduceAction677___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11384 */
+  /* ./parser//parser.nit:11851 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11385 */
+  /* ./parser//parser.nit:11852 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11386 */
+  /* ./parser//parser.nit:11853 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11388 */
+  /* ./parser//parser.nit:11855 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38766,56 +40333,56 @@ void parser___ReduceAction677___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11389 */
+    /* ./parser//parser.nit:11856 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11391 */
+  /* ./parser//parser.nit:11858 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11392 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction677____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11392);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11859);
   }
-  REGB0 = ATTR_parser___ReduceAction677____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction698____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction677___init(val_t p0, val_t p1, int* init_table){
-  int itpos371 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction677].i;
+void parser___ReduceAction698___init(val_t p0, val_t p1, int* init_table){
+  int itpos387 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction698].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos371]) return;
+  if (init_table[itpos387]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11395;
-  fra.me.meth = LOCATE_parser___ReduceAction677___init;
+  fra.me.line = 11862;
+  fra.me.meth = LOCATE_parser___ReduceAction698___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11395 */
+  /* ./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___ReduceAction677____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction698____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos371] = 1;
+  init_table[itpos387] = 1;
   return;
 }
-void parser___ReduceAction678___action(val_t p0, val_t p1){
+void parser___ReduceAction699___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 11399;
-  fra.me.meth = LOCATE_parser___ReduceAction678___action;
+  fra.me.line = 11866;
+  fra.me.meth = LOCATE_parser___ReduceAction699___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -38826,24 +40393,24 @@ void parser___ReduceAction678___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11401 */
+  /* ./parser//parser.nit:11868 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11402 */
+  /* ./parser//parser.nit:11869 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11403 */
+  /* ./parser//parser.nit:11870 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11404 */
+  /* ./parser//parser.nit:11871 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11406 */
+  /* ./parser//parser.nit:11873 */
   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, 11406);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11873);
   }
-  /* ./parser//parser.nit:11408 */
+  /* ./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:11409 */
+  /* ./parser//parser.nit:11876 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38858,56 +40425,136 @@ void parser___ReduceAction678___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11410 */
+    /* ./parser//parser.nit:11877 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11412 */
+  /* ./parser//parser.nit:11879 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11413 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction678____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11413);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11880);
   }
-  REGB0 = ATTR_parser___ReduceAction678____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction699____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction678___init(val_t p0, val_t p1, int* init_table){
-  int itpos372 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction678].i;
+void parser___ReduceAction699___init(val_t p0, val_t p1, int* init_table){
+  int itpos388 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction699].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos372]) return;
+  if (init_table[itpos388]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11416;
-  fra.me.meth = LOCATE_parser___ReduceAction678___init;
+  fra.me.line = 11883;
+  fra.me.meth = LOCATE_parser___ReduceAction699___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11416 */
+  /* ./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___ReduceAction678____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction699____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos372] = 1;
+  init_table[itpos388] = 1;
+  return;
+}
+void parser___ReduceAction700___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 = 11887;
+  fra.me.meth = LOCATE_parser___ReduceAction700___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:11889 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11890 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11891 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11893 */
+  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:11894 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  }
+  /* ./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, 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);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction700___init(val_t p0, val_t p1, int* init_table){
+  int itpos389 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction700].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos389]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 11900;
+  fra.me.meth = LOCATE_parser___ReduceAction700___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit: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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos389] = 1;
   return;
 }
-void parser___ReduceAction680___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 = 11420;
-  fra.me.meth = LOCATE_parser___ReduceAction680___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;
@@ -38918,24 +40565,24 @@ void parser___ReduceAction680___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11422 */
+  /* ./parser//parser.nit:11906 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11423 */
+  /* ./parser//parser.nit:11907 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11424 */
+  /* ./parser//parser.nit:11908 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11425 */
+  /* ./parser//parser.nit:11909 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11427 */
+  /* ./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, 11427);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11911);
   }
-  /* ./parser//parser.nit:11429 */
+  /* ./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:11430 */
+  /* ./parser//parser.nit:11914 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38950,56 +40597,56 @@ void parser___ReduceAction680___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11431 */
+    /* ./parser//parser.nit:11915 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11433 */
+  /* ./parser//parser.nit:11917 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11434 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction680____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, 11434);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11918);
   }
-  REGB0 = ATTR_parser___ReduceAction680____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___ReduceAction680___init(val_t p0, val_t p1, int* init_table){
-  int itpos373 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction680].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[itpos373]) return;
+  if (init_table[itpos390]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11437;
-  fra.me.meth = LOCATE_parser___ReduceAction680___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:11437 */
+  /* ./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___ReduceAction680____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction701____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos373] = 1;
+  init_table[itpos390] = 1;
   return;
 }
-void parser___ReduceAction682___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 = 11441;
-  fra.me.meth = LOCATE_parser___ReduceAction682___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;
@@ -39010,24 +40657,24 @@ void parser___ReduceAction682___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11443 */
+  /* ./parser//parser.nit:11927 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11444 */
+  /* ./parser//parser.nit:11928 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11445 */
+  /* ./parser//parser.nit:11929 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11446 */
+  /* ./parser//parser.nit:11930 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11448 */
+  /* ./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, 11448);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11932);
   }
-  /* ./parser//parser.nit:11450 */
+  /* ./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:11451 */
+  /* ./parser//parser.nit:11935 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39042,55 +40689,56 @@ void parser___ReduceAction682___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11452 */
+    /* ./parser//parser.nit:11936 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11454 */
+  /* ./parser//parser.nit:11938 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11455 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction682____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, 11455);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11939);
   }
-  REGB0 = ATTR_parser___ReduceAction682____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___ReduceAction682___init(val_t p0, val_t p1, int* init_table){
-  int itpos374 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction682].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[itpos374]) return;
+  if (init_table[itpos391]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11458;
-  fra.me.meth = LOCATE_parser___ReduceAction682___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:11458 */
+  /* ./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___ReduceAction682____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction703____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos374] = 1;
+  init_table[itpos391] = 1;
   return;
 }
-void parser___ReduceAction684___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 = 11462;
-  fra.me.meth = LOCATE_parser___ReduceAction684___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;
@@ -39101,79 +40749,170 @@ void parser___ReduceAction684___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11464 */
+  /* ./parser//parser.nit:11948 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11465 */
+  /* ./parser//parser.nit:11949 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11466 */
+  /* ./parser//parser.nit:11950 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11467 */
+  /* ./parser//parser.nit:11951 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11469 */
+  /* ./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, 11469);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11953);
   }
-  /* ./parser//parser.nit:11471 */
+  /* ./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 {
+    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[2] = fra.me.REG[5];
+  /* ./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, 11960);
+  }
+  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___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 = 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: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___ReduceAction705____goto(fra.me.REG[1]) = REGB0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos392] = 1;
+  return;
+}
+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 tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  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;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[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:11969 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11970 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11971 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11972 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./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, 11471);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11976);
   }
-  /* ./parser//parser.nit:11472 */
+  /* ./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:11473 */
+  /* ./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:11474 */
+  /* ./parser//parser.nit:11979 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11475 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction684____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, 11475);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11980);
   }
-  REGB0 = ATTR_parser___ReduceAction684____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___ReduceAction684___init(val_t p0, val_t p1, int* init_table){
-  int itpos375 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction684].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[itpos375]) return;
+  if (init_table[itpos393]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11478;
-  fra.me.meth = LOCATE_parser___ReduceAction684___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:11478 */
+  /* ./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___ReduceAction684____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction707____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos375] = 1;
+  init_table[itpos393] = 1;
   return;
 }
-void parser___ReduceAction688___action(val_t p0, val_t p1){
+void parser___ReduceAction711___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 = 11482;
-  fra.me.meth = LOCATE_parser___ReduceAction688___action;
+  fra.me.line = 11987;
+  fra.me.meth = LOCATE_parser___ReduceAction711___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -39184,24 +40923,24 @@ void parser___ReduceAction688___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11484 */
+  /* ./parser//parser.nit:11989 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11485 */
+  /* ./parser//parser.nit:11990 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11486 */
+  /* ./parser//parser.nit:11991 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11487 */
+  /* ./parser//parser.nit:11992 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11489 */
+  /* ./parser//parser.nit:11994 */
   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, 11489);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11994);
   }
-  /* ./parser//parser.nit:11491 */
+  /* ./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:11492 */
+  /* ./parser//parser.nit:11997 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39216,56 +40955,56 @@ void parser___ReduceAction688___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11493 */
+    /* ./parser//parser.nit:11998 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11495 */
+  /* ./parser//parser.nit:12000 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11496 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction688____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11496);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12001);
   }
-  REGB0 = ATTR_parser___ReduceAction688____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction711____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction688___init(val_t p0, val_t p1, int* init_table){
-  int itpos376 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction688].i;
+void parser___ReduceAction711___init(val_t p0, val_t p1, int* init_table){
+  int itpos394 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction711].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos376]) return;
+  if (init_table[itpos394]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11499;
-  fra.me.meth = LOCATE_parser___ReduceAction688___init;
+  fra.me.line = 12004;
+  fra.me.meth = LOCATE_parser___ReduceAction711___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11499 */
+  /* ./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___ReduceAction688____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction711____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos376] = 1;
+  init_table[itpos394] = 1;
   return;
 }
-void parser___ReduceAction689___action(val_t p0, val_t p1){
+void parser___ReduceAction712___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 = 11503;
-  fra.me.meth = LOCATE_parser___ReduceAction689___action;
+  fra.me.line = 12008;
+  fra.me.meth = LOCATE_parser___ReduceAction712___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -39275,13 +41014,13 @@ void parser___ReduceAction689___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11505 */
+  /* ./parser//parser.nit:12010 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11506 */
+  /* ./parser//parser.nit:12011 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11507 */
+  /* ./parser//parser.nit:12012 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11509 */
+  /* ./parser//parser.nit:12014 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39296,56 +41035,56 @@ void parser___ReduceAction689___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11510 */
+    /* ./parser//parser.nit:12015 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11512 */
+  /* ./parser//parser.nit:12017 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11513 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction689____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11513);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12018);
   }
-  REGB0 = ATTR_parser___ReduceAction689____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction712____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction689___init(val_t p0, val_t p1, int* init_table){
-  int itpos377 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction689].i;
+void parser___ReduceAction712___init(val_t p0, val_t p1, int* init_table){
+  int itpos395 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction712].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos377]) return;
+  if (init_table[itpos395]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11516;
-  fra.me.meth = LOCATE_parser___ReduceAction689___init;
+  fra.me.line = 12021;
+  fra.me.meth = LOCATE_parser___ReduceAction712___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11516 */
+  /* ./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___ReduceAction689____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction712____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos377] = 1;
+  init_table[itpos395] = 1;
   return;
 }
-void parser___ReduceAction690___action(val_t p0, val_t p1){
+void parser___ReduceAction713___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 = 11520;
-  fra.me.meth = LOCATE_parser___ReduceAction690___action;
+  fra.me.line = 12025;
+  fra.me.meth = LOCATE_parser___ReduceAction713___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -39356,24 +41095,24 @@ void parser___ReduceAction690___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11522 */
+  /* ./parser//parser.nit:12027 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11523 */
+  /* ./parser//parser.nit:12028 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11524 */
+  /* ./parser//parser.nit:12029 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11525 */
+  /* ./parser//parser.nit:12030 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11527 */
+  /* ./parser//parser.nit:12032 */
   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, 11527);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12032);
   }
-  /* ./parser//parser.nit:11529 */
+  /* ./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:11530 */
+  /* ./parser//parser.nit:12035 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39388,56 +41127,56 @@ void parser___ReduceAction690___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11531 */
+    /* ./parser//parser.nit:12036 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11533 */
+  /* ./parser//parser.nit:12038 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11534 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction690____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11534);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12039);
   }
-  REGB0 = ATTR_parser___ReduceAction690____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction713____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction690___init(val_t p0, val_t p1, int* init_table){
-  int itpos378 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction690].i;
+void parser___ReduceAction713___init(val_t p0, val_t p1, int* init_table){
+  int itpos396 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction713].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos378]) return;
+  if (init_table[itpos396]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11537;
-  fra.me.meth = LOCATE_parser___ReduceAction690___init;
+  fra.me.line = 12042;
+  fra.me.meth = LOCATE_parser___ReduceAction713___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:11537 */
+  /* ./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___ReduceAction690____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction713____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos378] = 1;
+  init_table[itpos396] = 1;
   return;
 }
-void parser___ReduceAction691___action(val_t p0, val_t p1){
+void parser___ReduceAction714___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11541;
-  fra.me.meth = LOCATE_parser___ReduceAction691___action;
+  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;
@@ -39447,13 +41186,13 @@ void parser___ReduceAction691___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11543 */
+  /* ./parser//parser.nit:12048 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11544 */
+  /* ./parser//parser.nit:12049 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11545 */
+  /* ./parser//parser.nit:12050 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11547 */
+  /* ./parser//parser.nit:12052 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39468,56 +41207,56 @@ void parser___ReduceAction691___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11548 */
+    /* ./parser//parser.nit:12053 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11550 */
+  /* ./parser//parser.nit:12055 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11551 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction691____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./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, 11551);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12056);
   }
-  REGB0 = ATTR_parser___ReduceAction691____goto(fra.me.REG[0]);
+  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___ReduceAction691___init(val_t p0, val_t p1, int* init_table){
-  int itpos379 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction691].i;
+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[itpos379]) return;
+  if (init_table[itpos397]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11554;
-  fra.me.meth = LOCATE_parser___ReduceAction691___init;
+  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:11554 */
+  /* ./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___ReduceAction691____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction714____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos379] = 1;
+  init_table[itpos397] = 1;
   return;
 }
-void parser___ReduceAction692___action(val_t p0, val_t p1){
+void parser___ReduceAction715___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11558;
-  fra.me.meth = LOCATE_parser___ReduceAction692___action;
+  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;
@@ -39528,24 +41267,24 @@ void parser___ReduceAction692___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11560 */
+  /* ./parser//parser.nit:12065 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11561 */
+  /* ./parser//parser.nit:12066 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11562 */
+  /* ./parser//parser.nit:12067 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11563 */
+  /* ./parser//parser.nit:12068 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11565 */
+  /* ./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, 11565);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12070);
   }
-  /* ./parser//parser.nit:11567 */
+  /* ./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:11568 */
+  /* ./parser//parser.nit:12073 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39560,44 +41299,44 @@ void parser___ReduceAction692___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11569 */
+    /* ./parser//parser.nit:12074 */
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11571 */
+  /* ./parser//parser.nit:12076 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11572 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction692____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, 11572);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12077);
   }
-  REGB0 = ATTR_parser___ReduceAction692____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___ReduceAction692___init(val_t p0, val_t p1, int* init_table){
-  int itpos380 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction692].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[itpos380]) 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 = 11575;
-  fra.me.meth = LOCATE_parser___ReduceAction692___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:11575 */
+  /* ./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___ReduceAction692____goto(fra.me.REG[1]) = REGB0;
+  ATTR_parser___ReduceAction715____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos380] = 1;
+  init_table[itpos398] = 1;
   return;
 }